共用体union

18.共用体union:就是对同一块内存中存储的二进制的不同理解而已。
1.结构体类似一个包裹,结构体中的成员彼此是独立存在的,分布在内存的不同单元中,它们只是被打包成一个整体叫做结构体而已;结构体的变量是同时存在的;但是共用体不是这样,共用体中的各个成员其实是一体的,在这么多个成员中,同一时刻只能是其中的某一个成员存在,有时候是这个元素,有时候是另外一个元素,也可以理解为在同一个空间里,这时刻内存空间里放的是饼干,下一时刻放的是糖果,但是饼干和糖果只能有一个存在。
2.共用体中sizeof测到的大小实际是union中各个元素里面占用内存最大哦的那个元素的大小而已,因为可以保证能够存下所有该union共用体中的所有类型。
3.union中的元素不存在内存对齐的问题,因为union中实际只有1个内存空间,都是从同一个地址开始的(开始地址就是整个union占有的内存空间的首地址),所以不涉及内存对齐。
union myunion
{
int a;
char b;
};
int main(void)
{
union myunion u1;
u1.a = 23;
printf("u1.b = %d.\n", u1.b); //u1.b = 23,因为u1.a和u1.b的地址是一样的,说明a和b指向同一块内存,只是对内存的不同解析规则不一样。
//&u1.a和&u1.b的地址是一样的。
printf("a = %p.\n", &u1.a);
printf("b = %p.\n", &u1.b);

printf("sizeof(u1) = %d.\n", sizeof(u1));
printf("sizeof(u1.a) = %ld.\n", sizeof(u1.a));
printf("sizeof(u1.b) = %d.\n", sizeof(u1.b));
}


用途:
共用体就用在那种对同一个内存单元进行多种不同规则解析的这种情况下。
C语言中其实是可以没有共用体的,用指针和强制类型转换可以替换共用体完成同样的功能,但是共用体的方式更简单、更便捷、更好理解。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值