1

我已经定义了一个这样的结构

Struct rectangle{

int x;
int y;
int z;

};

然后在我的主要方法中,我将分配变量:

void main(int argc, const char *argv[])

{

   for(i=0;i<20;i++)

   {

     rectangle[i].x = 20;
     rectangle[i].y = 10;

    }

}

但我不会随时分配结构的“z”变量。我可以这样做吗?希望我不是在问一些非常愚蠢的问题!

提前致谢!

4

4 回答 4

6

是的,没关系。任何尝试使用rectangle[i].z都会导致未定义的行为,*但这不是问题,只要您不尝试使用它。


* 除非rectangle被声明为全局/静态数组,在这种情况下,它的所有成员都被隐式初始化为零。

于 2013-02-07T15:36:43.700 回答
4

你被允许这样做。该成员z将具有不确定的值。
所以如果你使用它,而不给它分配任何值,你最终会得到一个Undefined Behavior(UB)

但是,如果结构对象是全局或静态对象,z则将被隐式初始化为0,您不必为 UB 操心。

于 2013-02-07T15:36:47.720 回答
0

如前所述,它不会受到伤害。您甚至可以打印 rectangle[i].z 的值来查看堆栈中之前的内容:)。

于 2013-02-07T15:38:49.027 回答
0

是的,您可以在不声明的情况下逃脱,z但 z 的值将是未定义的。

Think about using a default constructor for the struct and also defining rectangle z as a gloabal or static will initialize it to 0 so you don't have to worry about the value it will take on otherwise.

于 2013-02-07T15:50:52.043 回答