C语言--联合体

  • 联合类型声明:union + 名称 ----- 联合体的变量定义

union Un
{
 char c;
 int i;
};
union Un u;  //定义变量u
  • 联合体的特征:联合体的成员是共用同一块内存空间的,这样一个联合变量的大小,至少是最大成员的大小(因为联合至少得有能力保存最大的那个成员)。

例题:判断目前计算机的大小端存储。

什么是大小端存储?

大端(存储)模式,是指高字节存放在低位;低字节存放在高位。

小端(存储)模式,高字节存放高位;低字节存放低位。

简单记忆大端存储模式下,字节顺序和在地址中的顺序是一致的;而小端存储模式下,刚好相反。

0x0011存储时,大端模式下,地址中的顺序为00 11 ;在小端存储模式下,地址中的顺序为 11 00。

#include <stdio.h>
int check_sys()
{
int i = 1;
return *(char*)&i;
}
int main()
{
int ret = check_sys();
if (ret == 0)
{
printf("大端\n");
}
else
printf("小端\n");
return 0;
}
//打印小端

使用共用体来判断大小端。

#include <stdio.h>
int check_sys()
{
int i = 1;
union un       //共用体的定义和结构体的定义类似
{
char j;
int q;
}u;
u.q = i;      //将i的值存入共用体的空间中
return u.j;   //访问一个字节数据
}
int main()
{
int ans = check_sys();
if (ans == 0)
{
printf("大端\n");
}
else
printf("小端\n");
return 0;
}
//打印小端。
  • 共用体的大小计算

方法:

联合的大小至少是最大成员的大小。

最大成员大小不是最大对齐数的整数倍的时候,就要对齐到最大对齐数的整数倍。(最大对齐数与编译器无关,只和数据类型有关

例:

#include <stdio.h>
int main()
{
union Un1
{
char c[5];
int i;
};
union Un2
{
short c[7];
int i;
};
//下面输出的结果是什么?
printf("%d\n", sizeof(union Un1));
printf("%d\n", sizeof(union Un2));
return 0;
}
//打印8 16

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值