#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
//联合,又名共用体
// 这种类型定义的变量也包含一系列的成员,特征是这些成员公用同一块空间
//
//联合的声明
/*union Un
{
int a;
char c;
};*///联合的地址和各成员的地址相同。
//可以类比生活中的合租
//独立房间就可以理解为结构体
//联合体最巧妙的应用场景就是在一定程度上节省了空间
//一个联合体的大小至少是最大的成员的大小,因为联合体至少得有能力存下最大的成员
//访问联合体成员的方式与结构体相同
//int main()
//{
// union Un u;
// printf("%u", sizeof(u));
// return 0;
//}
//判断当前机器是大端存储还是小端存储
//int main()
//{
// int a = 1;
// if (*(char*)&a == 1)
// {
// printf("您的机器是小端存储");
// }
// else
// {
// printf("您当前的机器是大端存储");
// }
// return 0;
//}
//或者采取用联合体的方式
//int main()
//{
// union Un
// {
// char c;
// int i;
// }u;
// u.i = 1;
// if (u.c == 1)
// {
// printf("当前机器是小端字节序存储");
// }
// else
// {
// printf("当前机器是大端字节序存储");
// }
// return 0;
//}
//联合体的大小
//联合体的大小至少是最大对齐数的倍数
union Un
{
char arr[5];
int i;
}u;
int main()
{
printf("%u", sizeof(u));
//结果是8, 因为联合体需要5个字节,而联合体的大小至少是最大对齐数的倍数
//以上联合体的最大对齐数是4
return 0;
}