本篇文章将将讲解联合体:
1、联合体类型的声明
2、联合体的特点
3、相同成员的结构体和联合体对比:
4、联合体大小的计算
1、联合体类型的声明
联合体关键字:union
结构体 联合体
关键字: struct union
成员变量: 多个成员 多个成员
内存: 每个成员都有自己独立的空间 所有成员共用同一块内存空间
像结构体一样,联合体也是由一个或者多个成员构成,这些成员可以是不同的类型。
但是编译器只为最大的成员分配足够的内存空间。联合体的特点是所有成员共用同一块内存空间。所以联合体又叫共用体
给联合体其中一个成员赋值,其它成员的值也跟着变化。
代码:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
union Un
{
char c;
int i;
};
int main()
{ //联合体变量的定义
union Un un = { 0 };
//计算联合体变量的大小
printf("%zd\n", sizeof(un));
return 0;
}
2、联合体的特点
&(un.i)==&(un.c).说明i和c共用同一块内存。
联合体的成员变量是共用同一块内存空间的,这样一个联合体变量的大小,至少是最大成员的大小(因为联合体至少得有能力保存最大的那个成员)。
3、相同成员的结构体和联合体对比:
struct S
{
char c;
int i ;
};
union s
{
char c;int i;
};
4、联合体大小的计算
(1)联合体的大小至少是最大成员得到大小
(2)当最大成员大小不是最大对齐数的整数倍的时候,就要对齐到成员最大对齐数的整数倍。
例如:
联合体是可以节省空间的。
此外,联合体也有匿名联合体类型:
例如:
union
{
char arr[5];
int i;
}un;