目录
一、联合类型的定义
//联合也是一种特殊的自定义类型,这种类型定义的变量也包含一系列的成员,特征是这些成员共用同一块空间,所以联合体也叫共用体;
union Un//联合体声明;
{
char c;
int i;
};
int main()
{
union Un un;//联合体变量的定义;
printf("%d\n", sizeof(un));//联合体变量的大小;//输出:4;
return 0;
}
二、联合的特点
//联合的成员是共用同一块内存空间的,这样一个联合变量的大小,至少是最大成员的大小,即至少保证能保存最大的成员;
union Un//联合体声明;
{
char c;
int i;
};
int main()
{
union Un un;//联合体变量的定义;
printf("%p\n", &un);//输出:00AFFC8C;(地址为内存分配)
printf("%p\n", &(un.c));//输出:00AFFC8C;(地址为内存分配)
printf("%p\n", &(un.i));//输出:00AFFC8C;(地址为内存分配)
//联合体 un 与 其中成员 c 和 i 的起始地址一致,证明两个成员公用一段内存;
un.i = 0x11223344;
un.c = 0x55;
printf("%x\n", un.i);//输出:11223355;当改动联合体其中一个成员的数值时,由于存放的地址一致,会根据改动的数据的类型,按照改动数据类型的大小,覆盖掉联合体原来保存的数据;
return 0;
}
三、联合大小的计算
//联合的大小至少是最大成员的大小,当最大成员大小不是最大对齐数的整数倍时,需要对齐到最大对齐数的整数倍;
union un
{
char arr[5];//长度为5;
int i;//长度为4;
};
int main()
{
printf("%d\n", sizeof(union un));//输出:8;因为存在对齐规则;
return 0;
}
(-- end --)