一、联合体的定义
联合是一种特殊的自定义类型
这种类型定义的变量也包含一系列的成员,特征是这些成员公用同一块空间,所以联合体也叫共用体。
//联合类型的声明
union Un
{
char c;
int i;
};int main()
{
//联合变量的定义
union Un un;
//计算联合变量的大小
printf("%d\n", sizeof(un));
return 0;
}
二、联合的特点
联合的成员是共用同一块内存空间的,这样一个联合变量的大小,至少是最大成员的大小,因为联合至少得有能力保存最大的那个成员。
//联合的特点
union Un
{
int i;
char c;
};
int main()
{
union Un un;
printf("%p\n", &(un.i));//000000286F35FA24
printf("%p\n", &(un.c));//000000286F35FA24un.i = 0x11223344;
un.c = 0x55;
printf("%x\n", un.i);//11223355
return 0;
}
我们可以根据这一个特点来判断我们的机器是大端存储还是小端存储
//判断是大小还是小端
//方法一:
int main()
{int a = 1;int ret = *(char*)&a;if (ret == 1){printf("小端\n");}else{printf("大端\n");}return 0;
}//方法二:
union Un
{char c;int i;
};
int main()
{union Un un;un.i = 1;if (1 == un.c){printf("小端\n");}else{printf("大端\n");}return 0;
}
三、联合大小的计算
联合的大小至少是最大成员的大小;
当最大成员的大小不是最大对齐数的整数倍的时候,就要对齐到最大对齐数的整数倍。
//计算联合的大小union Un1
{char c[5];int i;
};union Un2
{short c[7];int i;
};int main()
{printf("%d\n", sizeof(union Un1));printf("%d\n", sizeof(union Un2));return 0;
}