• C语言基础:C语言枚举


    前言

    前段时间我们讲完了指针和结构体, 这次我们来讲枚举类型, 什么是枚举呢? 打个比方, 比如我们一个星期有七天, 从周一到周日, 这是固定不变, 不可能无端端的跳出一个星期八出来, 在这种固定的情况下, 我们如果要写一个程序去固定这七天, 并且不让别人乱修改, 为了满足这个需求, 枚举就诞生啦.


    开始

    首先我们来看看一个需求, 一年固定有四个季节, 需要用枚举去实现, 那么我们要怎么做呢? 来看看下面这个例子吧:

    #include <stdio.h>
    
    int main()
    {
        enum Season
        {
            spring,
            summer,
            autumn,
            winter
        };
        
        enum Season s = spring;
        
        enum Season b = 1000;   //由于C语言是弱语法, 所以这样子赋值也是可以编译通过的
        
        return 0;
    }

    上面这个例子就是最简单的枚举类型的定义以及使用,  在调用枚举类型的时候, 就只能用里面的四个枚举类型成员.


    PS: 由于C语言是一种弱语法, 没有强硬规定别的值不可以给枚举类型使用, 所以给枚举类型变量随便赋值也是可以的, 但有是优秀的程序员都会严格要求自己去遵循一些书写规范, 希望大家也要严格要求自己.



    补充知识:

    我们说的枚举, 里面定义的几个枚举成员变量, 他们是怎么存储的? 其实他们是以整型常量类型存储的, 让我们来看看输出的结果如何:

    #include <stdio.h>
    
    int main()
    {
        enum Season
        {
            spring,
            summer,
            autumn,
            winter
        };
        
        enum Season s = spring;
        
        printf("spring = %d
    ", s);
        
        return 0;
    }


    输出结果:




    那么以此类推

    summer 是1
    autumn 是2
    winter 是3


    那如果我们改掉了其中一个值呢? 让我们来看看例子吧:

    #include <stdio.h>
    
    int main()
    {
        enum Season
        {
            spring = 1,
            summer,
            autumn,
            winter
        };
        
        enum Season a = spring;
        enum Season b = summer;
        enum Season c = autumn;
        enum Season d = winter;
        
        printf("spring = %d
    ", a);
        printf("summer = %d
    ", b);
        printf("autumn = %d
    ", c);
        printf("winter = %d
    ", d);
    
        return 0;
    }

    输出结果:




    那如果我不是从头开始改变, 而是从中间某一个开始改呢?

    让我们来继续看看:

    #include <stdio.h>
    
    int main()
    {
        enum Season
        {
            spring = 1,
            summer,
            autumn = 10,
            winter
        };
        
        enum Season a = spring;
        enum Season b = summer;
        enum Season c = autumn;
        enum Season d = winter;
        
        printf("spring = %d
    ", a);
        printf("summer = %d
    ", b);
        printf("autumn = %d
    ", c);
        printf("winter = %d
    ", d);
    
        return 0;
    }

    输出的结果:



    由此我们可以看出, 默认是从0~3, 如果从头改掉一个, 那么后面就会逐渐的增加, 如果从中间开始改的话, 那么中间的那个值之后的枚举成员就会跟着那个被改值后继续增加.


    说的有点拗口, 但大家可以根据上面的例子和图来自行理解, 相信大家都懂的.

  • 相关阅读:
    网络爬虫之框架(Scrapy)
    模拟投币试验
    [LeetCode#177]Nth Highest Salary
    Windows Server 2008 各版本功能差异与比较各版本概观--转载
    Win2008 R2下Server Core常用命令小结
    powershell 中用Sqlps管理我台sqlserver 2008r2
    初识 Markdown
    React 入门(3): 严格模式 ReactDOM
    ES6 类的正确定义方式 公有类字段 getter / setter
    Lodash 去抖动 节流
  • 原文地址:https://www.cnblogs.com/iOSCain/p/4282879.html
Copyright © 2020-2023  润新知