繁体   English   中英

UNION IN C(输出是什么)

[英]UNION IN C (What will be the output)

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

如果我们为x分配512的值并尝试打印a [0]和a [1],那么输出将是什么,请解释如何?

根据标准,未定义先写入工会的成员,然后再从另一个成员读取的结果。 几乎任何事情都可能发生。

实际上,如果您在小端机上运行代码,则a [0]可能为0,而a [1]可能为2。在16位大端机上,a [0]将为2并且a [1]将为0。在32位big-endian机器上,(不存在,正如您所定义的那样)a [2]将为2,a [0],a [1]和&a [3]为0。

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

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

实际上,union对int和char使用相同的内存,因此,

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

(实际上,我可能在错误的方向上没有大的字节序)

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM