目录
2.联合体
2.1联合体类型的声明
2.2联合体的特点
2.3联合体的内存大小
3.枚举
3.1枚举类型的声明
3.2枚举类型的优点
3.3枚举类型的使用
2.联合体
联合体(Union)是另一种复合数据类型,它允许我们在同一内存位置存储不同的数据类型,但在任意时刻只能存储其中一个类型的值。联合体的大小由其最大成员决定,这使得它在需要节省内存或者在多个数据类型之间进行切换时非常有用。例如,我们可以使用联合体来存储一个整数或者一个浮点数,根据需要选择存储哪种类型的数据。
2.1联合体类型的声明
和结构体一样,联合体也是由一个或者多个成员构成,这些成员可以是不同的类型。有意思的是,编译器只会给其中最大的成员来分配足够的空间,这就是联合体最大的特点——所有的成员公用一块内存空间,所以联合体也叫:共用体。
那么给联合体其中⼀个成员赋值,其他成员的值也跟着变化呢?
仔细想想联合体的成员公用一个内存,那么给它赋值之后好像确实所有的成员值都会发生改变,换一种方式说,联合体调用哪个成员,哪个成员便会使用这块空间,就会输出你所赋的值。
输出结果为:
2.2联合体的特点
联合体的成员是公用同一块内存空间的,这样一个联合体变量的大小,至少是最大成员的大小(因为联合体至少得有能力保存最大的那个成员)。
这里小编给出两个代码以帮助更好的理解联合体的特点:
代码1:
结果为:
(这里的运行结果每次都会变化,因为计算机会给联合体随机分配空间)
我们仔细分析就可以画出,un的内存布局图。以次来更好的理解
代码2:
结果为:
那么为什么会输出11223355而不是11223344,我们同意来画图分析。
这样是不是就更加理解了联合体的特点呢。
2.3联合体的内存大小
结构体的内存大小遵循结构体的对齐规则,那联合体的内存大小是不是也应该有对齐规则呢?答案显然是有的。
- 联合的大小至少是最大成员的大小。
- 当最大成员大小不是最大对齐数的整数倍时,就要对齐到最大对齐数的整数倍。
结果为:
3.枚举
枚举(Enum)是一种特殊的数据类型,它允许我们定义一个由一组命名的常数组成的集合。枚举在需要定义一组具有明确意义的选项时非常有用,比如一周的七天、一年的四季等。枚举的使用不仅可以提高代码的可读性,还可以避免使用魔术数(Magic Numbers),使得代码更加健壮和易于维护。
3.1枚举类型的声明
枚举顾名思义就是一一列举,把可能取到的值一一列举。
比如我们生活中的:一周有7天可以一一列举,月份有12个月也可以一一列举,三原色也可以一一列举。
enum Day//星期
{
Mon,
Tues,
Wed,
Thur,
Fri,
Sat,
Sun
};
enum Color//颜⾊
{
RED,
GREEN,
BLUE
};
以上的enum Day和enum Color都是枚举类型。
3.2枚举类型的优点
既然是定义常量,那么define也可以用来定义常量,为什么还要创建一个枚举类型呢?
枚举的优点:
- 增加代码的可读性和可维护性
- 和#define定义的标识符比较,枚举有类型检查,更加严谨
- 便于调试u,预处理阶段会删除#define定义的符号
- 使用方便,一次可以定义多个变量
- 枚举常量是遵循作用域规则的,枚举声明在函数内,只能在函数内使用
3.3枚举类型的使用