有下列代码
#include<stdio.h>
union
{
int a[2];
long b;
char c[4];
}s;
int main()
{
s.a[0]=0x12345678;
s.a[1]=0x1111;
printf("%x\n",s.b);
printf("%x\n",s.c[0]);
printf("%x\n",s.c[1]);
printf("%x\n",s.c[2]);
printf("%x\n",s.c[3]);
}
问输出结果是什么?
首先我们明白联合体所有变量公用一段内存。
且int 为4字节,long 为4字节, char 为1字节
所以有
那么显然b的值为0x12345678
又由于X86计算机把高字节数据存在高地址,把低字节数据存在低地址(小端字节序)。
所以我们得到的c[0]~c[3]应为78 56 34 12
运行结果如下: