提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
联合体/共用体(union)是一个c语言比较少用的知识点,相比于结构体(structure或者struct)。两者的差异比较明显,我作为一个新手也是最近才了解了联合体的存在。
一、联合体是什么?
联合体是一种用户定义的数据结构,其所有的成员共用同一段存储,因此修改一个成员变量时,所有的共用体成员变量均受影响。各个成员变量的大小允许不同,联合体的大小就是最大的那个成员的大小(可理解为max)。
其格式如下:(来自C语言中文网http://c.biancheng.net/view/2035.html)
union 共用体名{
成员列表
};
共用体的物理存储原理如下:
可见其是一端对齐的,对大成员赋值将会完全覆盖掉小成员的原值,对小成员赋值会修改大成员的一部分。
二、和结构体的不同
联合体和结构体最大的差异就在于成员之间的关系。结构体由所有成员封装而成,成员彼此互不影响,其大小至少是所有的成员大小之和,若彼此有缝隙则更大(可理解为sum+)。
在单片机编程中,一般结构体应用更加广泛,封装库文件时一般采用结构体把某个硬件外设的所有相关成员变量封装在同一个结构体中,利用其互不干扰的特点对某一成员单独修改。共用体和结构体可以嵌套。