联合(union)
注意:命名开头大写!
它与结构的使用语法基本一样,区别是结构的每个成员都有独立的存储空间,而联合是所有成员共用一块存储空间(每个成员都从0地址开始),因此同一时刻只能有一个成员使用,只要有一个成员的值发生变化,其它成员的值也会随之变化
注意:联合的特点就是使用少量的内存对应多个标识符,使用它可以节约内存,在现代的编程中很少使用联合(不再需要极端地节约内存了)
相关重点:
1、计算大小,不需要计算对齐(每个成员都从0开始,天然对齐),但要注意补齐
2、利用联合判断系统的大小端
小端:低位地址存储低位数据(低存低,高存高)
大端:低位地址存储高位数据(低存高,高存低)
eg. 0x01020304,且有地址0x18存储4字节
01|02|03|04 -> 大端
04|03|02|01 -> 小段
注:数据左大右小,地址左低右高
eg.一联合含char和int,用int存储数据,用char读取,因为char只从0地址(低地址)读取一位数据,看取得的是高位数据还是低位数据,就可以判断大小端
d.num = 0x01020304;
if(d.ch == 0x01)
{
printf("大端");
}
else
{
printf("小端");
}
或 printf("%s",d.ch == 0x01 ? "大端" : "小端");
结果为小端
注:绝大多数的个人计算机都是小端,而服务器、网络设备都是大端(因此大端也叫:网络字节序)