联合
联合也是一种特殊的自定义类型 这种类型定义的变量也包含一系列的成员,特征是这些成员公用同一块空间(所以联合也叫共用体)。
- 联合的特点:
- 联合的成员是共用同一块内存空间的,这样一个联合变量的大小,至少是最大成员的大小(因为联合至少得有能力保存最大的那个成员)。
// 联合体也叫共用体
union Un
{
char c;
int i;
};
int main()
{
union Un u;
// 4个字节
printf("%d \n", sizeof(u));
// 三个内存地址相同 共用同一块空间
printf("%p \n", &u);
printf("%p \n", &(u.c));
printf("%p \n", &(u.i));
return 0;
}
//--------------------------------------------------------------
int my_da()
{
union Un
{
char c;
int i;
}u;
u.i = 1;
return u.c;
}
int main()
{
int ret = my_da();
if (ret == 1)
{
printf("小端");
}
else
{
printf("大端");
}
return 0;
}
//----------------------------------------------------------
-
联合大小的计算
-
联合的大小至少是最大成员的大小。
-
当最大成员大小不是最大对齐数的整数倍的时候,就要对齐到最大对齐数的整数倍。
union U
{
short c[5];// 2 10
int i;// 4
}u;
int main()
{
printf("%d", sizeof(u));// 12字节
return 0;
}