C语言中的枚举(enum)
在编程时,常常希望变量只能存储一组可能值中的一个。例如一个变量存储当前月份,则只能在 1~12 里面选。C语言的枚举(enumeration)就是为这种情形设计的。
利用枚举可以定义一个新的整数类型,该类型变量的值域被限定为我们指定的几个可能值。
1. 定义枚举类型
enum Weekday {Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday};
- 这个语句定义了一种新类型,而不是变量。
- 新类型的名称叫
Weekday,紧跟在enum关键字后面(enum Weekday整体作为类型名)。 Weekday可以像int、double一样用来声明变量,但该变量的取值只能从花括号内的枚举器中选择。- 花括号内的
Monday、Tuesday等称为枚举器(或枚举常量),数量任意。
2. 枚举器的默认值
枚举器本质上对应整数值,默认从 0 开始,之后每个递增 1:
| 枚举器 | 默认整数值 |
|---|---|
Monday | 0 |
Tuesday | 1 |
Wednesday | 2 |
Thursday | 3 |
Friday | 4 |
Saturday | 5 |
Sunday | 6 |
因此 enum Weekday today = Wednesday; 中,today 实际存储的是整数 2。
3. 声明枚举变量的多种方式
方式一:先定义类型,再声明变量
enum Weekday today = Wednesday;
方式二:定义类型的同时声明变量
enum Weekday {Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday} today, tomorrow;
方式三:声明时初始化
enum Weekday {Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday}
today = Monday, tomorrow = Tuesday;
方式四:进行算术运算
enum Weekday {Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday}
today = Monday, tomorrow = today + 1; // tomorrow 为 TuesdayCode language: JavaScript (javascript)
4. 综合代码示例
#include <stdio.h>
int main(void)
{
enum Weekday{
Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday
} one = Wednesday, two = Saturday + 1;
int age = 12;
enum Weekday today = Monday;
enum Weekday tomorrow = today + 1;
printf("one = %d\n", one); // 输出 2 (Wednesday)
printf("two = %d\n", two); // 输出 6 (Sunday,Saturday+1)
printf("today = %d\n", today); // 输出 0 (Monday)
printf("tomorrow = %d\n", tomorrow); // 输出 1 (Tuesday)
return 0;
}Code language: PHP (php)
5. 核心要点
| 特性 | 说明 |
|---|---|
| 本质 | 枚举是一种整数类型,枚举器是命名整数常量 |
| 默认值 | 枚举器从 0 开始自动编号,可手动指定(如 Monday = 1) |
| 类型安全 | 变量只能赋枚举器或整数,但编译器通常不强制检查范围 |
| 运算 | 枚举变量可参与整数运算(如 today + 1),结果需强制转换回枚举类型更安全 |
| 作用域 | 枚举器在定义所在作用域内可见,不同枚举中不能有同名枚举器 |