UNION IN C(将是什么输出)

时间:2010-09-06 07:25:58

标签: c unions

union a
{
 int x;
 char a[2];
}

如果我们为x分配512值并尝试打印[0]和[1]那么输出将是什么 请解释一下怎么样?

4 个答案:

答案 0 :(得分:5)

根据标准,写入联盟的一个成员,然后从另一个成员读取的结果没有定义。几乎任何事情都可能发生。

实际上,如果你在小端机器上运行代码,[0]可能是0,而[1]可能是2.在16位大端机器上,[0]将是2和a [1]将是0.在32位大端机器上,(不存在,因为你定义的东西)a [2]将是2,并且a [0],a [1 ],& a [3]将为0。

答案 1 :(得分:3)

我取决于平台的字节顺序。在小端平台(Intel)上,[0]将具有整数的最低有效字节(4个字节),因此[0]将保持0x00和[1] 0x02

答案 2 :(得分:1)

这取决于您运行它的计算机的字节顺序:

union实际上对你的int和你的字符使用相同的内存,所以,

int           512 (ie 0x200)
char[4]       0x00 0x00 0x02 0x00  little endian, so a[0]=0, a[1]=0
char[4]       0x00 0x02 0x00 0x00  big endian   , so a[0]=0, a[1]=2

(实际上,我可能会错误地使用小端和大端)

答案 3 :(得分:0)

C中的联合共享相同的内存空间,即x和a [2]都从相同的内存位置开始。将值分配给其中一个时,另一个会被覆盖。

在你的情况下,当你为x分配512时,你也会将它的字节写入char,就像FernandoMiguélez刚刚解释的那样......