在X86下,有下列程序
#include<stdio.h>
void main()
{
union
{
short k;
char i[2];
}*s, a;
s = &a;
s->i[0] = 0x39;
s->i[1] = 0x38;
int q = a.k;
printf("%x\n", q);
//int i = 0x12345678;
//printf("%0x\n",i);
system("pause");
}
这是在小端机器上运行的结果,因为char 是按字节存储的,从下图可以看出先把0x39放在s->i[0]最低地址处,再把0x38放在s->i[1]次低地址处
联合体是共享内存的,a.k的存储空间和a.i是一样的,因此打印q时高位便是38地位是39,即3839.
下图帮助理解小端存储: