Wiki:知识&笔记 Wiki:知识&笔记
首页
  • 学习笔记

    • 《JavaScript教程》笔记
  • 嵌入式

    • STM32
  • 技术文档
归档
GitHub (opens new window)
首页
  • 学习笔记

    • 《JavaScript教程》笔记
  • 嵌入式

    • STM32
  • 技术文档
归档
GitHub (opens new window)
  • Python

  • C 语言继续教育

    • typedef
    • 预处理器
    • 枚举
      • 什么是枚举
      • 枚举的定义
        • 格式
        • 枚举变量的定义
        • 枚举变量的赋值
      • 自问自答
      • 应用
        • 遍历
        • Switch 应用
    • 结构体
    • 位域
    • 共用体
    • C大型程序
    • C 语言标准库
    • 其它零碎补充
  • 学习笔记

  • 语言学习
  • C 语言继续教育
2020-08-16
什么是枚举
枚举的定义
格式
枚举变量的定义
枚举变量的赋值
自问自答
应用
遍历
Switch 应用

枚举

# 什么是枚举

  • 枚举是 C 语言中的一种基本数据类型,它可以让数据更简洁,更易读
  • 在 C 语言中,枚举类型是被当做 int 或者 unsigned int 类型来处理的

# 枚举的定义

# 格式

枚举

enum 枚举名 {元素1, 元素2, ... ...};
1

例如:

enum WEEK {MON = 1, TUE, WED, THU, FRI, SAT, SUN};
1

也可以写成:

enum WEEK
{
    MON = 1, TUE, WED, THU, FRI, SAT, SUN
};
1
2
3
4

注意

枚举元素默认是从0开始的,依次递增。如果要修改请给任意元素手动赋值,且其后续依然自动递增

例如:

enum HELLO {A, B = 3, C, D};
1

这个时候A = 0 但是 B = 3而后的元素递增

# 枚举变量的定义

刚刚定义的枚举名和后面的元素就相当于一个枚举的所有可能值,也就是定义域,有了定义域就会有取值为此范围内的变量也就是枚举变量,其定义方式有三种:

枚举变量

enum WEEK {MON = 1, TUE, WED, THU, FRI, SAT, SUN};
enum WEEK day;
1
2
enum WEEK {MON = 1, TUE, WED, THU, FRI, SAT, SUN} day;
1
enum {MON = 1, TUE, WED, THU, FRI, SAT, SUN} day;
1

# 枚举变量的赋值

你可以自由的给枚举变量赋上其定义域之内的值,不管是元素名或者元素值都可以:

enum WEEK {MON = 1, TUE, WED, THU, FRI, SAT, SUN} day;
day = MON;
// 等价于
day = 1;
1
2
3
4

提示

但是在将整型变量的值赋给枚举变量时,你最好先进行类型转换:

enum WEEK {MON = 1, TUE, WED, THU, FRI, SAT, SUN} day;
int a = 1;
day = (enum WEEK)a;  // 进行类型转换
1
2
3

# 自问自答

至少我有以下疑问:

  • 为什么要使用枚举?

    因为它可以让数据更简洁,更易读;以上面的星期数为例,如果使用#define你需要7行代码才可以

  • 枚举变量的值可以超出枚举元素的范围吗?

    可以,但没必要

# 应用

# 遍历

对于元素值连续的枚举变量,我们可以遍历;但是对于不连续的元素值,无法遍历:

for (day = MON; day <= SUN; day++) {
    printf("%d\n", day);
}
1
2
3

# Switch 应用

case的关键字可以使用枚举的元素名来时代码更加易读:

#include <stdio.h>

enum COLOR {RED, BLUE, GREEN} my_color;

int main()
{
    prtinf("Please enter your color: 0 for red, 1 for blue, 2 for green: ");
    sacnf("%d", &my_color);
    
    switch (my_color) {
        case RED:
            printf("red\n");
            break;
        case BLUE:
            printf("blue\n");
            break;
        case GREEN:
            printf("green\n");
            break;
    }
    
    return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
编辑 (opens new window)
上次更新: 2020/08/16, 12:08:00
预处理器
结构体

← 预处理器 结构体→

Theme by Vdoing | Copyright © 2020-2025 Jack :) | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式