当前位置: 首页 > news >正文

【C语言】一篇带你从零了解 枚举

文章目录

  • 什么是枚举
  • 枚举类型的定义
  • 枚举的优点
  • 枚举的使用

什么是枚举

枚举是 C 语言中的一种基本数据类型
可以让数据更简洁,更易读。

枚举顾名思义就是 一 一 列举。
把可能的取值 一 一列举。
比如我们现实生活中:

  1. 一周的星期一到星期日是有限的7天,可以一一列举。
  2. 性别有:男、女、保密,也可以一一列举。
  3. 月份有12个月,也可以一一列举
    这里就可以使用枚举了。

枚举类型的定义

enum Day//星期
{Mon,Tues,Wed,Thur,Fri,Sat,Sun
};
enum Sex//性别
{MALE,FEMALE,SECRET
}enum Color//颜色
{RED,GREEN,BLUE
};

以上定义的 enum Day , enum Sex , enum Color 都是枚举类型。

{ }中的内容是枚举类型的可能取值,也叫 枚举常量 。
这些可能取值都是有值的,默认从0开始,一次递增1,当然在定义的时候也可以赋初值。
例如:

enum Color//颜色
{
RED=1,
GREEN=2,
BLUE=4
};

当然如果给前面某个枚举常量赋值了,后面的枚举常量也会从赋值的常量开始 递增1 如:

下面代码的结果是:( )enum ENUM_A
{X1,Y1,Z1 = 255,A1,B1,
};
enum ENUM_A enumA = Y1;
enum ENUM_A enumB = B1;
printf("%d %d\n", enumA, enumB)

枚举默认从0开始,所以X1是0,故Y1是1,给了数字后会根据数字向后推,那么Z1是255,A1是256,所以B1是257.


枚举的优点

  1. 增加代码的可读性和可维护性
  2. 和#define定义的标识符比较枚举有类型检查,更加严谨。
  3. 防止了命名污染(封装)
  4. 便于调试
  5. 使用方便,一次可以定义多个常量

#define 宏命令虽然能解决问题,但也带来了不小的副作用,导致宏名过多,代码松散,看起来总有点不舒服。C语言才提供了一种枚举(Enum)类型,能够列出所有可能的取值,并给它们取一个名字。


枚举的使用

只能拿枚举常量给枚举变量赋值,才不会出现类型的差异。
C语言对类型检查不够严格(可能不会报错)
换成C++就不行了,必须遵守这个规则。

enum Color//颜色
{RED = 1,GREEN = 2,BLUE = 4
};int main()
{enum Color clr = GREEN;printf("%d", clr);return 0;
}

输出结果为2

在C 语言中,枚举类型是被当做 int 或者 unsigned int 类型来处理的,所以按照 C 语言规范是没有办法遍历枚举类型的。
不过在一些特殊的情况下,枚举类型必须连续是可以实现有条件的遍历。
以下实例使用 for 来遍历枚举的元素:

enum DAY
{MON = 1, TUE, WED, THU, FRI, SAT, SUN
} ;
int main()
{enum DAY day;// 遍历枚举元素for (day = MON; day <= SUN; day++) {printf("枚举元素:%d \n", day);}system("pause");return 0;
}

最终输出结果:
枚举元素:1
枚举元素:2
枚举元素:3
枚举元素:4
枚举元素:5
枚举元素:6
枚举元素:7

http://www.lryc.cn/news/42524.html

相关文章:

  • 用Pytorch搭建一个房价预测模型
  • 《Netty》从零开始学netty源码(十五)之ServerSocketChannel
  • Java stream性能比较
  • 【数据结构与算法】设计循环队列
  • 最新版!国内IT软件外包公司汇总~
  • MySQL的COUNT语句,竟然都能被面试官虐的这么惨!?
  • 数位DP 详解及其案例实战 [模板+技巧+案例]
  • 并发编程(六)—AbstractExecutorService源码分析
  • 015行为型-职责链模式
  • python例程:五子棋(控制台版)程序
  • leveldb的Compaction线程
  • 邪恶的想法冒出,立马启动python实现美女通通下
  • 蓝桥杯刷题冲刺 | 倒计时18天
  • 经典算法面试题——Java篇-附带赠书活动,评论区随机选取一人赠书
  • 支持RT-Thread最新版本的瑞萨RA2E1开发板终于要大展身手了
  • 【C语言进阶】 12. 假期测评①
  • 给程序加个进度条吧,1行Python代码,快速添加~
  • 常见的Keil5编译报错及其原因和解决方法
  • Django 实现瀑布流
  • 传输层协议----UDP/TCP
  • 教你如何快速在Linux中找到某个目录中最大的文件
  • Java二叉树面试题讲解
  • rancher2.6进阶之nfs动态创建pv配置
  • 快速上手vue elementUI好看的登录界面
  • Vue趣味【Vue3+Element Plus+Canvas实现一个简易画板;支持导出为图片】
  • 【Spring Cloud Alibaba】2.服务注册与发现(Nacos安装)
  • 深度学习 Day28——利用Pytorch实现好莱坞明星识别
  • Android中使用FCM进行消息推送
  • 从 X 入门Pytorch——BN、LN、IN、GN 四种归一化层的代码使用和原理
  • Windows环境下实施域名访问的一些小知识