联合体大家可能比较陌生,但是大家对结构体稍微熟悉一点吧。其实它们二个类似,只不过结构体成员占用不同的地址,而联合体所有成员占用相同地址。利用这个特性我们就能判断在当前编译器下存储的数据的格式。那么如何确定呢?
我这里就通过代码的方法给大家讲解。
typedef union
{
short value; //2个字节
unsigned char buff[2]; 一个unsigned char 占一个字节
}test; //定义一个联合体
int main(void)
{
test test1;
test1.value=0x3445; //赋值为0x3445
//由于联合体成员共用一段地址。所以buff的地址和value地址相同
//我们打印出地址,和地址的值。
printf("value的起始地址为:%d,低字节地址为:%d,高字节地址为:%d\n",
&(test1.value),&(test1.buff[0]),&(test1.buff[1]));
printf("value的值为:0x%x,低字节数据为:0x%x,高字节数据
为:0x%x\n",test1.value,test1.buff[0],test1.buff[1]);
return 1;
}
结果如图:
我们可以看出,低字节存储的是0x45对应的是value的低位0x45,所以低地址存储低位,是小端模式。
到这里就结束了?你们学会了吗?