目录
1.联合体的声明
2.联合体的特点
3.相同成员的结构体和联合体对比
4.联合体大小的计算
1.联合体的声明
像结构体一样,联合体也是由一个或者多个成员构成,这些成员可以不同的类型。但是编译器只为最大的成员分配足够的内存空间。
联合体的特点是所有成员共用同一块内存空间。
所以联合体也叫:共用体。给联合体其中一个成员赋值,其他成员的值也跟着变化。
#include<stdio.h>
union un
{
char i;
int j;
};
int main()
{
union un m = { 0 };
printf("%d", sizeof(m));//输出联合体的大小
return 0;
}
输出的结果:
4
为什么是4呢?
2.联合体的特点
联合的成员是共用同一块内存空间的,这样一个联合变量的大小,至少是最大成员的大小(因为联合至少得有能力保存最大的那个成员)。
输出的结果:
代码1输出的三个地址一模一样,代码2的输出,我们发现将i的第4个字节的内容修改为55了。我们仔细分析就可以画出,un的内存布局图。
3.相同成员的结构体和联合体对比
我们再对比一下相同成员的结构体和联合体的内存布局情况。
4.联合体大小的计算
⭐联合的大小至少是最大成员的大小
⭐当最大成员大小不是最大对齐数的整数倍的时候,就要对齐到最大对齐数的整数倍。
输出结果为:
8
8
因为两个联合体中最大成员分别为5字节和7字节而对齐数均为4字节(int的大小)所以两者均需要扩充到8字节(4字节的两倍)。
以上便是我为大家带来的联合体详解的内容,若有不足,望各位大佬在评论区指出,谢谢大家!可以留下你们点赞、收藏和关注,这是对我极大的鼓励,我也会更加努力创作更优质的作品。再次感谢大家!