联合
联合是一种特殊的自定义类型,这种类型定义的变量也包含一系列的成员,特征是这些成员公用同一块空间,因此又叫做共用体。
联合大小的计算
-
联合的大小至少是最大成员的大小,这样才有能力保存最大的那个成员。
-
当最大的成员大小不是最大对齐数的整数倍的时候,就要对齐到最大对齐数的整数倍。
#include <stdio.h> //联合的声明 union Un { short s[7]; int n; }; int main() { //联合的定义 union Un un; //计算联合的大小 printf("%d\n", sizeof(union Un));//16 printf("%d\n", sizeof(un));//16 return 0; }
因为我的计算机是有32根数据总线,因此,我的计算机的最大对齐数是4,我们找到联合中最大的成员short s[7],需要14个字节,然后补到最大对齐数4的整数倍,结果就是16。
使用联合判断计算机的大小端
//大端返回1,小端返回0,要求借用联合体的特性
union Data
{
int i;
char ch;
};
int isBigSystem()
{
union Data d;
//d.i = 0x00000001;
d.i = 1;
if (d.ch == 1)
{
return 0;
}
else
{
return 1;
}
}
//小端机低位放低位,高位放高位,小端机
//大端机低位放高位,高位放低位,大端机
int main()
{
printf("%d\n", isBigSystem());
return 0;
}