联合体(共用体)

什么是联合体

在C语言中,变量的定义是分配存储空间的过程。一般的,每个变量都具有其独有的存储空间,而使用联合体则可以实现在同一存储空间内存储多个类型,关键词为union

联合体与结构体

联合体在某种程度上与结构体是类似的但是也有所不同因为结构体为了让时间效率更高因此是将全部的类型全部都存储了下来因此造成了一部分的空间浪费,这一点不清楚的同学可以搜一下结构体的存储这篇文章,我的上一篇博客也有关于这方面的讲解。

联合体的存储

联合体的是将不同的类型存储在了相同的空间因此其有一部分的数据存在着重合,而运用这个特性我们可以很直观的测出来你的电脑在存储数据的时候是大端存储还是小端存储(这一部分不清楚的同学我稍后会将这一部分的内容更新出来)那么代码给各位奉上。判断电脑的大端小端其实也从侧面说明了联合体的类型是占用的同一空间的。

这个原因跟union的存储有关我们可以一起来看一下就比如,

上面这个联合体的 内存我们可以看到是4我们发现联合体内存的计算似乎也并不是简单的内存相加而是其中有一套自己的规则没错联合体内存的计算也是有规则呢有属于联合体的内存对齐。

联合体占用内存的计算

第一个条件

首先联合体内存要有两个条件第一个呢就是要大于或者等于占用内存最大的类型在上面的那个代码中我们可以看到int 是4个字节char是1个字节因此该内存必须大于等于四或者说必须是四的整数倍。这是第一个条件。

第二个条件

就是大小必须是内部成员基础类型的整数倍。上面的那个联合体的基础类型有char 和int 他们呢一个是1个字节另一个是4个字节取其公倍数并且还必须大于或者等于最大的内存也就是4因此结果就是4。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值