联合体大家可能比较陌生,但是大家对结构体稍微熟悉一点吧。其实它们二个类似,只不过结构体成员占用不同的地址,而联合体所有成员占用相同地址。利用这个特性我们就能判断在当前编译器下存储的数据的格式。那么如何确定呢?
我这里就通过代码的方法给大家讲解。
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,所以低地址存储低位,是小端模式。
到这里就结束了?你们学会了吗?