【问题标题】:why union member is assigned from another initialized one? [duplicate]为什么工会成员是从另一个初始化的成员分配的? [复制]
【发布时间】: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 这只是一个错字。我修好了。

标签: c++ member unions


【解决方案1】:

您的r 是一个全局变量。这些被初始化为零。 value 的第一个字节是c,其他字节为零。

相比之下,x 是一个局部变量,它们没有被初始化。 value 的第一个字节也是c,但其他字节就像你所说的随机或垃圾。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-19
    相关资源
    最近更新 更多