[英]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.