联合体
一片空间可以被不同类型数据共享,元素共用空间
- 关键字:union
- 定义类似于结构体;定义一个联合模板和联合变量
- 空间大小由最大的数据类型的大小来确定
union Test{
int idata;
char cdata;
double fdata;
int idata2;
};
int main(){
union Test u;
printf("union size:%d\n",sizeof(u)); //unionde 大小
printf("idata addr:%p\n",&u.idata); //每个联合成员的地址
printf("cdata addr:%p\n",&u.cdata);
printf("cdata addr:%p\n",&u.fdata);
return 0;
}
输出
union size:8
idata addr:0000003e753ffb7c
cdata addr:0000003e753ffb7c
cdata addr:0000003e753ffb7c
由上得知联合体的大小空间时由double决定的,而且每个成员的地址都是同一个
- 初始化只是对其中的一个变量进行初始化,或者可以使用其他联合体来进行初始化,赋值类型等同于原值类型,或者通过“.”运算符来对指定成员进行初始化。直接赋值初始化(val4),会初始化第一个出现的同类型成员
union Test val1;
val1.cdata = "H";
union Test val2 = val1; //用其他联合体进行赋值
union Test val3 = {.fdata = 10.7}; //指定初始化
union Test val4 = {77}; //初始化了联合成员idata
- 联合体使用时可以在同一空间进行不同类型数据的赋值,如下在结构体中,对于不同的结构体变量可以定义使用不同的数据类型,其中联合体中的数据通过对联合体的声明时就定义联合体变量inf,访问联合体成员时通过(假设struct Person结构体变量为teacher)teacher.inf.post来进行
struct Person{
char name[MAX_STR];
int id;
char addr[MAX_STR];
union {
int class;
char post[MAX_STR];
}inf;
};