自定义类型——联合和枚举(简明分析)
2026/7/26 11:32:28 网站建设 项目流程

目录

一,联合体类型

1,联合体的声明

2,联合体的内存分配

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

4,联合体大小的计算

5,联合体的运用

1,利用联合体来节省空间

2,利用联合体判断大小端字节序

二,枚举类型

1,枚举类型的声明

2,枚举类型的优点

3,枚举类型的使用


一,联合体类型

1,联合体的声明

与结构体类型,联合体也是由一个和多个成员所构成,这些成员可以是不同类型的。

不同的是内存只为最大的类型开辟空间,其他成员和最大成员共用一块空间,所以联合体也叫共用体。

2,联合体的内存分配

联合体中的成员共用一块内存,所以联合体的大小至少是所占内存最大的成员的大小。

下面通过两个实例深度解析联合体的内存分配情况:

1.

上述代码的输出结果为:

4 //表示联合体的大小与最大成员i的大小相同

00DEFBA0
00DEFBA0
00DEFBA0 //表示联合体开创的空间的首地址和元素 i以及元素a的地址相同

图中橙色部分表示i和a共用的部分。

2,

储存时任然按照小端序列存储,首元素地址最小。

当不改变是c的地址处存入的就是44,此时改变c,i也会跟着改变。相反改变i,c也会改变。

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

存储情况对比:

由此可知相较于使用结构体来说,使用联合体更节省内存。

但是相较于结构体来说,由于c和i之间不相互独立,当想要改变其一时,就会影响另一个。

4,联合体大小的计算

联合体的大小遵循两个规则:

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

2,联合体的大小是最大对齐数的整数倍处。

金色为a和i的共用区域,蓝色为a中最后一个元素的区域,由于最大对齐数是4,所以联合体的大小至少是4的倍数,所以空出3个字节,最后取8

Un2的情况类似b占14个字节,最大对齐数为4,所以取16为最终大小。

5,联合体的运用

1,利用联合体来节省空间

假设有三种物品:书、杯子、衣服

这三种物品有三种公共属性:库存量,价格,商品类型

除此之外还有自身属性:

其中图书有:书名、作者、页数

杯子有:设计

衣服:设计、可选颜色、可选尺寸

此时利用结构体存储这些信息:

如果利用联合体存储这些信息时:

通过联合体存储自身属性,可以大大节省空间,同时因为只会在三个物品中选择一个,所以不会产生相互影响的情况。

2,利用联合体判断大小端字节序

二,枚举类型

1,枚举类型的声明

枚举类型就是把可能的取值一一列举

例如:三原色:red、green、blue

性别:male、female、secret

enum color、enum sex都是枚举类型

{}中的内容是枚举类型的可能取值,也叫枚举常量。

上面的取值都有默认值,默认从0开始,依次递增加1

结果:0 1 2

也可以直接对里面的内容赋初值例如:

打印结果:0 7 8

2,枚举类型的优点

我们可以使用#define 来定义常量,相比之下使用枚举有什么优点?

枚举的优点:

1,增加代码的可读性和维护性

2,和#define定义的标识符相比枚举有类型检查,更加严谨

3,便于调试,而#define预处理阶段会删除#define定义的符号

4,方便使用,一次可以定义多个变量

5,枚举常量是遵循作用域规定的,枚举声明在函数内,只能在函数内使用

3,枚举类型的使用

也可以使用整数给枚举变量赋值,但在C++中无法实现。
枚举例题:

1,枚举类型的枚举值只可能是整型常量表达式

2,枚举类型本质上是一种整数类型,在内存中存储为整数

3,枚举类型可以作为函数的参数进行传递,也可以作为函数的返回值

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

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

立即咨询