C语言干货分享 | C语言的联合体
我们知道结构体(Struct)是一种构造类型或复杂类型,它可以包含多个类型不同的成员。

在C语言 中,还有另外一种和结构体非常类似的语法,叫做共用体(Union),它的定义格式为:
union 共用体名{ 成员列表 };
共用体有时也被称为联合或者联合体,这也是 Union 这个单词的本意。
结构体和共用体的区别在于:结构体的各个成员会占用不同的内存,互相之间没有影响;而共用体的所
有成员占用同一段内存,修改一个成员会影响其余所有成员。
结构体占用的内存大于等于所有成员占用的内存的总和(成员之间可能会存在缝隙),共用体占用的内
存等于最长的成员占用的内存。共用体使用了内存覆盖技术,同一时刻只能保存一个成员的值,如果对
新的成员赋值,就会把原来成员的值覆盖掉。
运行结果:

2、结构体冒号的用法
结构体中的冒号表示位域,位域出现的原因是由于某些信息的存储表示只需要几个bit位就可以表示而不 需要一个完整的字节,同时也是为了节省存储空间和方便处理。
其表示形式为:
struct 位域结构名
{
类型说明符位域名:位域长度
}
其表示形式为:
struct bit_struct
{
int bit1:3;
int bit2:5;
int bit3:7;
}data;
其中bit_struct表示位域结构体,bit1、bit2、bit3表示对应的位域,data表示位域结构体定义的变量。整个位域结构体占用2个字节,bit1占3位,bit2占5位,bit1和bit2共用一个字节,bit3占7位,独占一个字节
运行结果:

3、联合使用
举一个MCP2518FD芯片的例子:先看一下CAN帧格式:

看不懂的小伙伴可以忽略:
另外,对现在我们的大多数朋友来说还是学编程技术最重要!栽一棵树最好的时间是十年前,其次是现在。对于准备学习编程的小伙伴,如果你想更好的提升你的编程核心能力(内功)不妨从现在开始!
微信公众号:C语言编程学习基地
整理分享(多年学习的源码、项目实战视频、项目笔记,基础入门教程)
欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!
