#include <stdio.h>
int main()
{
union a
{
int i;
char ch[2];
};
union a z = { 512 };
printf("%d %d %d", z.i, z.ch[0], z.ch[1]);
}
输出:
512 0 2
为什么打印ch[1]
会给2
?
答案 0 :(得分:1)
在一个联合中,所有成员都从内存中的同一位置开始。
因此ch[2]
与i
从同一位置开始。 512 = 0x00000200。因此,在小尾数法中,第一个字节为00
,第二个字节为02
。
答案 1 :(得分:0)
您的联合有4个字节,并分配有512个字节,这意味着您有
00:00:00:00-00:00:00:00-00:00:00:10-00:00:00:00
因为512是一个在其后有9个零的数字。
从这里很容易理解您的照片。
正如@Some程序员伙计所说,这是由于二进制数字看起来像+字节序。