自定义类型-联合体
概念
联合体是一种特殊的数据类型,允许在相同的内存位置存储不同的数据类型
联合体的所有成员共享同一块内存空间,大小由最大的成员决定
用于在同一块内存单元内存放不同类型的变量
语法结构
结构与结构体类似,
union 共用体名
{成员列表
}变量列表;union Data {int i; // 整型成员float f; // 浮点型成员char str[20]; // 字符数组成员
};
特点
同一个内存段可以用来存放几种不同类型的成员,但只能同时存放其中一个成员的数据,不能同时存放几个成员的数据,因为联合体的所以成员是共用同一块空间的,访问不同的成员时,会将前一个成员的内存覆盖
联合体总体大小的规则
联合体的大小至少是最大成员的大小
当最大成员的大小不是最大对齐数的整数倍时,需要对齐到最大对齐数的整数倍
union Data {int i; 为4字节float f; 为4字节char str[20]; 为1字节
};
该联合体的最大字节为4字节,4为最大对齐数的倍数
因此该结构体的总体大小为4字节
联合体与结构体的区别
维度 | 结构体(struct ) | 联合体(union ) |
---|---|---|
数据共存性 | ✅ 所有成员数据同时有效 | ❌ 同一时间仅一个成员有效 |
内存效率 | 占用内存较多(所有成员独立存储) | 占用内存较少(共享内存) |
数据安全性 | 高(成员修改互不影响) | 低(修改成员会覆盖其他数据) |
设计哲学 | 数据聚合(“与”关系:所有属性需同时存在) | 数据互斥(“或”关系:同一时间只需一个属性) |