我已经定义了这样的结构
Struct rectangle{
int x;
int y;
int z;
};
然后在我的main方法中,我将分配变量:
void main(int argc, const char *argv[])
{
for(i=0;i<20;i++)
{
rectangle[i].x = 20;
rectangle[i].y = 10;
}
}
但我不会随时分配结构的'z'变量。我可以这样做吗? 希望我不要问一些非常愚蠢的事情!
提前致谢!
答案 0 :(得分:5)
是的,没关系。任何使用rectangle[i].z
的尝试都会导致未定义的行为, * 但只要您不尝试使用它就不会有问题。
<小时/> *除非
rectangle
被声明为全局/静态数组,否则其所有成员都被隐式初始化为零。
答案 1 :(得分:3)
你被允许这样做。会员z
会有不确定值
因此,如果您使用它,而不为其指定任何值,您将最终得到未定义行为(UB)。
但是,如果结构对象是全局或静态对象,则z
将隐式初始化为0
,您不必担心UB。
答案 2 :(得分:0)
如前所述,它不会造成伤害。您甚至可以打印矩形[i] .z的值来查看之前在堆栈中的内容:)。
答案 3 :(得分:0)
是的,您可以在不声明z
的情况下离开,但z的值将是未定义的。
考虑使用结构的默认构造函数,并将rectangle z
定义为gloabal或static将其初始化为0
,这样您就不必担心它将采用的值
答案 4 :(得分:-1)
Struct rectangle{
int x;
int y;
int z;
rectangle() : x(0), y(0), z(0) {}
};
这样你知道默认情况下会有一些合理的价值。