今天刚考完试,须要花些时间来折腾一下日常没注意的地方,以避免翻车。code
在c语言中,struct用的较多,union用的较少(我的感受。。)众所周知,struct结构体占用的内存空间根据结构体里的东西还有内存对齐方式等决定,而union根据我大一看的书说只是不保证你存入的值就是你到时候取出来的值,这两天考试有个关于判断大端小端的问题,正是利用联合体实现的:内存
union { int a; char b; }c; c.a = 1; printf("%d", c.b);
那为何这样就能检测出来cpu大小端呢?这一点就是联合体的魅力。io
c.a =1;十六进制表示数据为0x00000001;class
->>>>>>>>>>>>>>>>>>>>>>>>nio
int 00 00 00 01im
char 00cpu
int 01 00 00 00数据
char 01img
->>>>>>>>>>>>>>>>>>>>>>>>语言
若是机器是小端字节序的,那么内存中数据排列为01000000;
若是机器是大端字节序的,那么内存中数据排列为00000001;
联合体中char和int共用空间
因为我这个英特尔CPU,因此得出的结果为1.