在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.
下图帮助理解小端存储:
新闻热点
疑难解答