在下面的代码中,可以预测int的值(如何?),或者它只是垃圾?
union a
{
int i;
char ch[2];
};
a u;
u.ch[0] = 0;
u.ch[1] = 0;
cout<<u.i;
}
答案 0 :(得分:3)
我想说这取决于int
和char
的大小。 union
包含最大变量的内存。如果int
为4个字节且char[2]
代表2个字节,则int
会占用比char
- 数组更多的内存,因此您不会初始化完整int
-memory为0,设置所有char
- 变量。这取决于你的内存初始化机制,但基本上int
的值似乎是随机的,因为额外的2个字节用未指定的值填充。
此外,填充union
的一个变量并阅读另一个变量正是使我的意见中的工会不安全的原因。
如果您确定int
是最大的数据类型,则可以通过编写
union
union a
{
int i;
char ch[2];
};
void foo()
{
a u = { 0 }; // Initializes the first field in the union
cout << u.i;
}
因此,将最大类型放在联合的开头可能是个好主意。但是,当所有位都设置为0时,并不认为所有数据类型都可以被视为零或空。