一、联合体(共用体)的定义
联合体是一种特殊的自定义类型,这种类型定义的变量也包含一系列的成员,特征是这些成员共用一块空间(所以联合体也叫共用体)。
联合体的声明格式:
union Un //去掉联合体名即为匿名联合
{
char c;
int i;
};
二、联合体的特点
联合体的成员是共用一块内存空间的,这样一个联合变量的大小,至少是最大成员的大小
(因为联合至少有能力保存最大的那个成员)。
三、联合体大小的计算
1.联合体的大小至少是最大成员的大小
2.当最大成员不是最大对齐整数倍的时候,就要对齐到最大对齐数的整倍数。
例如:
union Un1
{
char c[5];
int i;
};
union Un2
{
char arr[5];//对齐数是1
int i;
};
union Un3
{
short c[7];//14
int i;//4
};
union Un4
{
char c1;
char c2;
char c3;
char c4;
char c5;
int i;
};
int main()
{
//输出结果为8
printf("%d\n",sizeof(union Un1));
//输出结果为8
printf("%d\n",sizeof(union Un2));
//输出结果为16
printf("%d\n",sizeof(union Un3));
//输出结果为4
printf("%d\n",sizeof(union Un4));
return 0;
}
四、使用联合体判断大小端
大小端是计算机的的两种储存模式。
大端模式:是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中。
小端模式:是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中。
int check_sys()
{
union Un
{
char c;
int i;
}u;
u.i = 1;
return u.c;
}
int main()
{
int a = 1;//0x 00 00 00 01
//假设地址是 低----->高
//按小端存储 01 00 00 00
//按大端存储 00 00 00 01
int ret = check_sys();
if (ret == 1)
printf("小端\n");
else
printf("大端\n");
return 0;
}
标签:00,int,联合体,C语言,char,union,printf,共用 From: https://blog.csdn.net/a282828282/article/details/143593299