结合这一篇http://blog.csdn.net/linygood/article/details/6872926中提到的关于CPU内型的判断,以及自己看到的一个联合体实例分析一下
#include <stdio.h>
int main()
{
union{
int i;
struct{
char first;
char second;
}half;
}number;
number.i=0x4241;
printf("%c%c\n", number.half.first, number.half.second);
number.half.first='a';
number.half.second='b';
printf("%x\n", number.i);
}
这里需要对union的存储方式和CPU字节序要有所了解。numbe.i=0x4241,对于little-endian实际在内存中存储方式为:
低地址: 0x4241
高地址: 0x0000
而union的所有成员都是从低地址开始存放。因此number.half.first=0x41, number.half.second=0x42,所以输出:AB
而number.half.first='a'; number.half.second='b';之后内存如下:
低地址: 0x6261
高地址: 0x0000
所以number.i=0x0000 6261
输出:6261