定义
这种类型定义的变量也包含一系列的成员,特征是这些成员共用同一块空间(所以联合也叫共用体)。
union Un
{
//类似于共享单车,用c的时候不能用i,用i的时候不能用c
int i;
char c;
};
int main()
{
union Un u;
u.i = 0x11223344;
u.c = 0x00;
printf("%d\n", sizeof(union Un));//4 共用地址
printf("%p\n", &u);//0000006A4A1FF654
printf("%p\n", &(u.c));//0000006A4A1FF654
printf("%p\n", &(u.i));//0000006A4A1FF654
return 0;
}
联合的成员是共用同一块内存空间的,这样一个联合变量的大小,至少是最大成员的大小(因为联
合至少得有能力保存最大的那个成员)。
利用联合判断机器的大小端
int main()
{
union
{
int a;
char b;
}u;
u.a = 0x00112233;
if (u.b == 0x00)
{
printf("大端\n");
}
else if (u.b == 0x33)
{
printf("小端\n");
}
return 0;
}
联合的对齐
/*
联合也存在对齐,只不过能共用内存时就共用
联合的大小至少是最大成员的大小。
当最大成员大小不是最大对齐数的整数倍的时候,就要对齐到最大对齐数的整数倍。
union Un1 //8
{
char c[5];
int i;
};
union Un2 //16
{
short c[7];
int i;
};
*/