• C 语言编程 — 高级数据类型 — 枚举


    目录

    前文列表

    程序编译流程与 GCC 编译器
    C 语言编程 — 基本语法
    C 语言编程 — 基本数据类型
    C 语言编程 — 变量与常量
    C 语言编程 — 运算符
    C 语言编程 — 逻辑控制语句
    C 语言编程 — 函数
    C 语言编程 — 高级数据类型 — 指针
    C 语言编程 — 高级数据类型 — 数组
    C 语言编程 — 高级数据类型 — 字符串

    声明枚举类型

    枚举类型的本质是一个整型常量的集合,列举出可被访问的值的范围,所谓 “枚举” 就是把可能出现的值一一列举出来。需要先声明一个枚举类型,告诉编译器它具有哪些元素,然后才能够被定义一个枚举类型的变量。

    • 枚举类型定义中的每个枚举元素代表一个整型数值。若自定义枚举类型的同时无赋值行为,则由编译系统会按照定义的顺序为其分配 0, 1, 2, … 的数据值;反之,则以赋予的数值为准。
    • 枚举元素必须为常量,在枚举定义之外,均不能对枚举元素进行赋值操作。
    • 各枚举元素不能重名,枚举元素名也不能为程序中其他关键字或变量名。
    // enum 关键字用于定义枚举类型
    enum 枚举类型名
    {
        枚举元素1[=整型常量1],
        枚举元素2[=整型常量2],
        ...
        枚举元素n[=整型常量n]
    };
    

    e.g.

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

    默认情况下,第一个枚举成员的默认值为整型的 0,后续枚举成员的值在前一个成员上加 1,以此类推。如上例,如果我们在这个实例中把第一个枚举成员的值定义为 1,第二个就为 2,以此类推。

    定义枚举类型的变量

    • 先定义枚举类型,再定义枚举变量
    // 声明枚举类型
    enum DAY{
        MON=1, TUE, WED, THU, FRI, SAT, SUN
    };
    
    // 定义枚举类型变量
    enum DAY day;
    
    • 定义枚举类型的同时定义枚举变量
    enum DAY{
        MON=1, TUE, WED, THU, FRI, SAT, SUN
    } day;
    
    • 省略枚举名称,直接定义枚举类型的同时定义枚举变量
    enum{
        MON=1, TUE, WED, THU, FRI, SAT, SUN
    } day;
    

    示例:

    #include <stdio.h>
    
    /* 声明了一个枚举类型 */
    enum DAY{
        MON=1, TUE, WED, THU, FRI, SAT, SUN
    };
    
    
    int main(){
        /* 定义一个枚举类型变量 */
        enum DAY day;
        
        /* 枚举类型变量使用枚举值 */
        day = WED;
        
        printf("Day num is %d", day);
        return 0;
    }
    

    我们也可以在定义枚举类型时改变枚举元素的值:

    enum season {spring, summer=3, autumn, winter};
    

    没有指定值的枚举元素,其值为前一元素加 1。也就说 spring 的值为 0,summer 的值为 3,autumn 的值为 4,winter 的值为 5。

    枚举类型变量的枚举值

    C 语言中,枚举类型是被当做 int 或者 unsigned int 类型来处理的,所以按照 C 语言规范是没有办法遍历枚举类型的(因为不是数组类型)。

    不过在一些特殊的情况下,枚举类型是可以实现有条件的遍历的:

    #include <stdio.h>
    
    enum DAY{
        MON=1, TUE, WED, THU, FRI, SAT, SUN
    };
    
    int main(){
        int i;
    
        for(i = MON; i < SUN; i++){
            printf("Day is %d
    ", i);
        }
        return 0;
    }
    

    上述例子可见,枚举类型中的枚举值实际上就是一个整型,即便没有定义枚举类型的变量,编译器也会自动的将枚举元素替换为枚举值,并且当枚举值是顺序递增的时候就可以被循环。相反,则不行:

    enum{
        ENUM_0,
        ENUM_10 = 10,
        ENUM_11
    };
    

    枚举在 switch 语句中的使用

    #include <stdio.h>
    #include <stdlib.h>
    
    int main(){
        enum COLOR{
            red=1,
            green,
            blue,
        };
    
        enum COLOR favorite_color;
    
        printf("Input your favorite color:");
        /* %u for unsigned integer type*/
        scanf("%u", &favorite_color);
    
        switch(favorite_color){
            case red:
                printf("red.");
                break;
            case green:
                printf("green.");
                break;
            case blue:
                printf("blue.");
                break;
            default:
                printf("None.");
        }
        return 0;
    }
    

    将整型转换为枚举类型

    #include <stdio.h>
    #include <stdlib.h>
    
    int main(){
    
        enum DAY{
            MON=1, TUE, WED, THU, FRI, SAT, SUN
        } weekend;
    
        int a = 7;
        weekend = (enum DAY) a;
        // weekend = a 错误
    
        printf("weekend: %d", weekend);
        return 0;
    }
    

    相关阅读:

  • 相关阅读:
    2312--1.3.4 Prime Cryptarithm 牛式
    Slava and tanks 877C
    World Cup 996B(排队模拟)
    css内边距 边框
    iframs刷新的两种方法
    JS DOM节点
    JS对话框
    JS事件常用事件
    JS数组
    JS第一天
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13309375.html
Copyright © 2020-2023  润新知