一、枚举类型 enum
1. 什么是枚举?
枚举就是把可能的取值一一列出来,用来表示固定的几种状态。比如:星期、性别、颜色、状态(开始 / 暂停 / 结束)等。
好处:
- 代码可读性极强
- 限制取值范围,避免乱写数字
- 编译时检查,更安全
2. 定义语法
enum 枚举名 { 常量1, 常量2, 常量3, ... };3. 示例:定义星期
enum Week { Mon, // 0 Tue, // 1 Wed, // 2 Thu, Fri, Sat, Sun // 6 };- 默认从0开始依次递增
- 也可以手动指定值
enum Week {Mon=1, Tue, Wed};
4. 使用枚举变量
Week today = Wed; if (today == Wed) { cout << "今天周三" << endl; }5. 典型场景:程序状态
enum State { STOP, RUN, PAUSE }; State s = RUN;二、共用体 / 联合体 union
1. 什么是共用体?
多个成员共用同一块内存空间,同一时刻只有一个成员有效。
特点:
- 所有成员共享同一段内存
- 大小 = 最大成员的大小
- 改一个成员,会覆盖其他成员
2. 定义语法
union 共用体名 { 成员1; 成员2; 成员3; };3. 示例
union Data { int i; float f; char c; };4. 使用
Data d; d.i = 10; // 现在用 i d.f = 3.14f; // 现在用 f,i 的值已经被覆盖5. 适用场景
- 类型互斥,只存一种数据
- 内存极度紧张的嵌入式开发
- 协议解析、类型双关(低级用法)
三、结构体 + 枚举 + 共用体 综合小案例
#include <iostream> #include <string> using namespace std; // 枚举:性别 enum Gender { MALE, FEMALE }; // 结构体:人 struct Person { string name; Gender gender; int age; }; int main() { Person p = {"张三", MALE, 20}; cout << "姓名:" << p.name << endl; if (p.gender == MALE) { cout << "性别:男" << endl; } else { cout << "性别:女" << endl; } system("pause"); return 0; }四、struct /enum/union 对比(一张表看懂)
表格
| 类型 | 特点 | 内存 | 用途 |
|---|---|---|---|
| struct | 多个不同类型共存 | 所有成员总和 | 描述复杂对象(学生、商品) |
| enum | 有限个固定常量 | 整型大小 | 状态、分类、选项 |
| union | 多个成员共用一块内存 | 最大成员大小 | 内存紧张、类型互斥 |
五、新手高频易错点
- 枚举常量不能加引号,它是常量不是字符串
- 以为 union 可以同时保存多个成员(不行,会互相覆盖)
- 枚举值直接当数字用,失去语义意义
- 混用枚举名和枚举变量,语法错误
- 给枚举赋不在列表里的值,编译器不报错但逻辑混乱
六、今日重点总结
- 枚举 enum:列出固定取值,提高可读性,默认从 0 开始
- 共用体 union:成员共享内存,同一时刻只用一个
- 结构体 + 枚举是最常用组合,适合描述对象状态
- 日常开发:struct 最多,enum 常用,union 极少用
- 枚举让代码更清晰,union 用于特殊内存场景