☰
嵌入式开发C语言篇--联合和枚举
2026/10/3 2:26:41 网站建设 项目流程

(1)联合体类型的声明

1.1联合体的声明

像结构体一样,联合体也是有一个或多个成员构成,这些成员可以是不同类型,联合体的关键字是union

但是编译器只为最大的成员分配足够的内存空间,联合体的特点是所有成员共用同一块内存空间,所以联合体也叫:共用体

1.2联合体的特点

① 这样一个联合体变量的大小,至少是最大成员的大小(因为联合至少得有能力保存最大的那个成员)

②联合的成员是共用同一块内存空间的,即内存地址相同

③给联合体其中一个成员赋值,其他成员也跟着变化

1.3相同成员的结构体和联合体对比

我们在对比一下相同成员的结构体和联合体的内存布局情况

1.4联合体大小的计算

①联合体的大小至少是最大成员的大小

②当最大成员大小不是最大对齐数的整数倍的时候,就要对齐到最大对齐数的整数倍

练习一:

sizeof(un1)=4

练习二:

1.最大成员大小:char arr[5],5个字节

2.全部成员对齐数取最大:max(1,4)=4

3.5不是4的整数倍,向上补齐到最近4的倍数:8

sizeof(un2)=8

练习三

最大成员8,最大对齐数8

sizeof(un3)=8

练习四

最大成员大小:8;最大对齐数max(4,2)=4;

8是4的倍数

sizeof(un4)=8

1.5联合体的应用

使用联合体是可以节省空间的,举例:

有三种商品:图书,杯子,衬衫,每一种商品都有:库存量,价格,商品类型和其他信息,我们要存储商品的信息

图书:书名,作者,页数

杯子:设计

衬衫:设计,可选颜色,可选尺寸

上述结构体设计简单,用起来方便,但是结构的设计中包含了所有礼品的各种属性,这样得到的结构体的大小就会偏大,比较浪费内存

所以我们就可以把公共属性单独写出来,剩余属于各种商品本身的属性使用联合体,这样就可以节省内存



1.5联合的一个练习

写一个程序判断当前机器是大端还是小端

2.枚举类型

2.1枚举类型的声明

枚举顾名思义就是一一列举,它把一组命名的整型常量打包在一起,用来表示固定的有限选项

把可能的值一一列举,enum是枚举的关键字

比如:一周的星期一到星期日是有限的7天,可以一一列举

以上定义的enum Day,enum Sex,enum Color都是枚举类型

2.2枚举常量默认规则

默认从0开始,依次加1

也可以手动指定值

枚举变量本质就是存一个整数,可以用int接收

2.3枚举的优点

1.可读性高,RED比写数字0更容易看懂

2.限定可选范围:只能在枚举列表里选,避免乱赋值

3.可以用switch做分支,非常适合状态位,标志位

用typedef简化枚举(工程常用),用枚举常量,给枚举变量赋值

易错点:

1.枚举成员是全局常量,不要和变量名重名,

2.枚举变量c 可以存任意int 数字,编译器不会强制校验只能取枚举里面的值

3.枚举不占内存!(枚举成员只是符号常量,编译阶段替换成整数,不分配内存)只有枚举变量才占用内存,VS:sizeof(枚举)=4字节

已完结

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询