//————联合:union
 1.联合的定义
 联合也是一种特殊的自定义类型
 //#include<stdio.h>
 //union Un//Un为联合标签
 //{
 //    int a;
 //    char c;
 //};
 //struct St
 //{
 //    int a;
 //    int b;
 //};
 //int main()
 //{
 //    union Un u;
 //    printf("%d\n",sizeof(u));//4
 //    printf("%p\n",&u);
 //    printf("%p\n",&(u.a));
 //    printf("%p\n",&(u.c));//三个打印地址的结果相同
 //    return 0;
 //}
 2.联合体的特点
 联合体的成员是共用一块内存空间的,这样一个联合文件的大小,至少是最大成员的大小(因为至少要有能力保护最大的那个成员)
 //union Un
 //{
 //    int a;
 //    char c;
 //};
 //int main()
 //{
 //    union Un u;
 //    u.a = 0x11223344;
 //    u.c = 0x00;//将村的地址改为0,也就等同于把最高位地址改为0,由于a和c公用一块1字节大小的地址,即c的改动也会同时影响a,即a的地址变为0x11223300
 //    return 0;
 //}
 ——————通过枚举判断计算机大小端储存方式
 //#include<stdio.h>
 //int check_p()
 //{
     int a = 1;
     return *(char*)&a;//&a为取出a的地址01 00 00 00,强制类型转换后为char,1字节,所以为01.返回此值,进行判断
     //a的地址:
     //低->高
     //01 00 00 00——小端排序
     //00 00 00 01——大端排序
         替换为
     //union //Un//此类型创建在了函数内部(此类型只是为函数准备的,用一次之后就不再使用),因此联合标签Un可以省略,从而为:匿名联合(共用体)类型
     //{
     //    char c;
     //    int i ;
     //}u;
     //u.i = 1;//此处i的地址为01 00 00 00(小端),而i与c同时占用第一字节大小的地址。所以c的地址就成了01
     //return u.c;//返回1为小端,返回0为大端
 //}
 //int main()
 //{
 //    int ret = check_p();
 //    if (ret == 1)
 //        printf("小端\n");
 //    else
 //        printf("大端\n");
 //    return 0;
 //}
 ————3 .联合大小的计算
 //联合的大小至少是最大成员的大小。
 //当最大成员大小不是最大对齐数的整数倍的时候,就要对齐到最大对齐数的整数倍。
 //#include<stdio.h>
 //union Un1
 //{
 // char c[5];//5字节,对齐数5
 // int i;//4字节,对齐数4
 //};
 //union Un2
 //{
 // short a[7];//14字节,对齐数2
 // int b;
 //};
 //int main()
 //{
 //    printf("%d\n", sizeof(union Un1));
 //    //Un1中,最大对齐数为4,最大成员大小为5,所以对齐到最大对齐数的整数倍,为8
 //    printf("%d\n", sizeof(union Un2));
 //    //Un2中,最大对齐数为4,最大成员大小为14,所以对齐到最大对齐数的整数倍,为16
 //    return 0;
 //}