1)联合体的概念和特征:union维护足够的空间来存放多个数据成员中的“一种”,而不为每一个数据成员都配置空间,在union中所有的成员共用同一个空间,同一时间只存储一个数据成员,最大的特征就是所有的数据成员具有相同的起始地址即联合体的基地址。
2)计算机中字节存储主要有两种:大端模式(Big_endian)和小端模式(Little_endian),从英文名字上可以明白,大端模式是从低地址开始,高位结束,(即高地址存地位,低地址存高位);小端模式是从高地址开始,低地址结束(与大端相反,)。
3)利用union中所有数据成员具有同样的起始地址的特点,通过一个int成员存储1,然后通过char成员来读取,即可巧妙地得出数据存放的方式,若通过char成员(即读取起始位置上的第一个字节)读取,若得出值为1,则说明是小端模式。
通过GCC编译运行,运行结果跟计算机有关,(arm大多是小端模式,网络字节序为大端模式.有的计算机支持两种模式,可通过设置来切换),在我机器上运行结果是:this is Little_endian
代码如下:
#include<stdio.h>
int checkBigLittle(){
union{
int a;
char b;
}c;
c.a = 1;
return (c.b == 1);
}
int main(){
if(checkBigLittle() == 1)
printf("is little\n");
else
printf("is big\n");
return 0;
}