目录
1、什么是联合体
联合体是一种特殊的自定义类型,联合体中的成员可以共用一部分内存,所以也叫做共用体
联合体的声明和定义如下:
//联合类型的声明
union Un
{
char c;
int i;
};
//联合变量的定义
union Un un;
2、联合体的特点
联合的成员是共用同一块内存空间的,这样一个联合变量的大小,至少是最大成员的大小(因为联 合至少得有能力保存最大的那个成员)。
以上面的为例,整型变量 i 和 字符型变量 c 共用一个字节,此时联合体的大小就是变量 i 的大小。
3、联合体大小的计算
联合体大小的计算需要满足如下两个条件:
- 联合的大小至少是最大成员的大小。
- 联合体大小必须是最大对齐数的整数倍。当最大成员大小不是最大对齐数的整数倍的时候,就要对齐到最大对齐数的整数倍。
#include <stdio.h>
union Un1
{ //每个元素/变量自身大小 编译器默认对齐数——最大对齐数: 成员大小
char c[5]; //1 8 —— 1 : 5
int i; //4 8 —— 4 : 4
};
union Un2
{
short c[7]; //2 8 —— 2 : 14
int i; //4 8 —— 4 : 4
};
int main() {
printf("%d\n", sizeof(union Un1)); // 8
printf("%d\n", sizeof(union Un2)); // 16
return 0;
}
联合体Un1:
- 最大对齐数是 4 ,最大成员大小是 5
- 此时最大成员大小是 5 ,而联合体大小必须是对齐数的整数倍,如果联合体大小是 4,就无法容纳最大成员大小;因此,联合体大小是 8
联合体Un2:
- 最大对齐数是 4,最大成员大小是 14
- 如果联合体大小要能容纳最大成员大小,那么最大对齐数就是 16