在c中,联合体(共用体)的数据成员都是从低地址开始存放。
例如看下面一个例子:
union demo{int a;char b;
}c;
cout<< sizeof(c)<
也就是说,变量 a和b 都是占用着同样的内存空间。(就是说内存地址相同)
测试大端小端:
通过联合体所有成员起始地址一样的特点,此时,我们取其最低位的一个字节,可以发现,如果是大端,则得到的是0,如果是小端,得到的是1。
c.a = 1; // a,b的地址已经相同
return 1 == c.b;//返回1则为小端法,否则为大端法
这个图一下子就明白了,c.a=1时候,用32未表示是00 00 00 01
小端时候低地址低字节,这时候i是低字节,所以放入低地址
大端时候,低字节放高地址