【发布时间】:2022-01-12 18:51:10
【问题描述】:
为什么我不能用Strct结构的number字段的值来初始化整数变量num?
#include <iostream>
struct Strct
{
float number = 16.0f;
};
int main()
{
Strct* strct;
int num = strct->number;
return 0;
}
错误列表:使用了 C4700 未初始化的局部变量 'strct'
【问题讨论】:
-
Strct* strct;--strct需要指向某个有效的地方,而现在它指向...?另外,你为什么对这么简单的代码使用指针?只需Strct strct;即可,将->更改为.。 -
我以为我的strct指向的是Strct结构,也就是指向它的类型
-
没有。指针必须指向有效的实体、对象、活动实例,而不是类型。如果是这样,那么像这样的代码:
char *c; *c = 'x';就可以了,如果不是这样。 -
一个指针只是一个值,就像一个
int。它的值是一个地址。 指针 可以指向它的类型(在本例中为Strct)。或者它的值可以是nullptr。或者它可以是未初始化的——这就是这里的情况(并且具有与 C++ 中未初始化的事物相同的未定义行为问题)。或者它可以是一个悬空指针。或者可以是一个野指针。 -
去掉
*,用.代替->,问题解决。Strct strct; int num = strct.number;