一、C语言联合体(union)
1. 概念:联合体里面所有成员都共用一块内存,使用时候,所有成员属性选一个。
2. 定义
-定义联合体数据类型
union sorce
{
int a;
char b;
short c;
}
- 定义联合体变量
union a aaa;
-访问联合体的成员
aaa.a = 5
联合体内存分分配原理如图所示
所以成员变量中char类型数据只占其中的一个字节,short类型数据只占其中的两个字节。
二、利用联合体可以判断主机的大小端序
大端序:数据是以高位数据放到低位地址。
小端序:数据是以高位数据放大高位地址,低位数据放到低位地址。
注意:现在一般使用的主机都是小端序,内存存储数据都是从低位开始对低位数据先存储。
如何使用代码去验证主机的大小端序:
原理:从上面的联合体中可以知道所有成员都使用同一块内存,所以只要将数据存入到内存中再从低位读出数据就可以知道数据的存储的端序。
union num
{
int a;
unsigned char b;
}
int main(int argc,const char **argv)
{
union num aaa;
aaa.a = 0x12345678;
printf("0x%x",aaa.b);
}
如果打印结果是0x78则是小端序机
如果打印结果是0x12则是大端序机