枚举

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:

枚举器默认整数值
Monday0
Tuesday1
Wednesday2
Thursday3
Friday4
Saturday5
Sunday6

因此 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),结果需强制转换回枚举类型更安全
作用域​枚举器在定义所在作用域内可见,不同枚举中不能有同名枚举器

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注