如何在以下联合中分配值?

时间:2012-08-10 07:33:17

标签: c++ c arrays unions

在下面的代码中,可以预测int的值(如何?),或者它只是垃圾?

union a
{
    int i;
    char ch[2];
};
a u;
u.ch[0] = 0;
u.ch[1] = 0;
cout<<u.i;
}

1 个答案:

答案 0 :(得分:3)

我想说这取决于intchar的大小。 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时,并不认为所有数据类型都可以被视为零或空。