C语言笔记——联合体和结构体

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

联合体/共用体(union)是一个c语言比较少用的知识点,相比于结构体(structure或者struct)。两者的差异比较明显,我作为一个新手也是最近才了解了联合体的存在。

一、联合体是什么?

联合体是一种用户定义的数据结构,其所有的成员共用同一段存储,因此修改一个成员变量时,所有的共用体成员变量均受影响。各个成员变量的大小允许不同,联合体的大小就是最大的那个成员的大小(可理解为max)。

其格式如下:(来自C语言中文网http://c.biancheng.net/view/2035.html

union 共用体名{
    成员列表
};

共用体的物理存储原理如下:

 可见其是一端对齐的,对大成员赋值将会完全覆盖掉小成员的原值,对小成员赋值会修改大成员的一部分。

二、和结构体的不同

联合体和结构体最大的差异就在于成员之间的关系。结构体由所有成员封装而成,成员彼此互不影响,其大小至少是所有的成员大小之和,若彼此有缝隙则更大(可理解为sum+)。

在单片机编程中,一般结构体应用更加广泛,封装库文件时一般采用结构体把某个硬件外设的所有相关成员变量封装在同一个结构体中,利用其互不干扰的特点对某一成员单独修改。共用体和结构体可以嵌套。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值