【发布时间】:2017-06-13 17:17:42
【问题描述】:
声明变量而不初始化它会有一个垃圾值,所以在这个程序中我使用了一个联合:
union un
{
int value;
char c;
};
int main()
{
un x;
x.c = 'A';
cout << x.value << endl; // garbage: ok
}
上面打印值是可以的,只要我们没有初始化它就会产生垃圾值。
但是看看这个程序:
union un
{
int value;
char c;
}r;
int main()
{
r.c = 'A';
cout << r.value << endl; // 65! as we know the ASCII value of character 'A' is 65
}
那么上面两个程序有什么区别,为什么在第二个程序中value 得到c 的值?
【问题讨论】:
-
我不确定这是不是链接问题的副本。是的,这是未定义的行为,因此“任何事情都可能发生”,但答案实际上解释了为什么值不同。也许可以修改标题以突出问题的重点是全局值和局部值之间的差异。
-
@AnT:IMO 这只是一个错字。我修好了。