C语言中枚举精讲分析

在使用带有数字性质的名称时有的时候需要用到枚举的方式进行定义函数名字,按照对应的数字格式来对应相应的名称。枚举成员的值是常量不是变量。
     我们首先讲解一下枚举与结构体的区分,结构体是不同数据整合到一起形成的数据团,需要哪个结构体中的成员按照结构体成员的调用的方式即可。在枚举中,枚举中的成员都是按照从0,1,2...往下排的。
     假如我们想告诉用户今天是星期几,可能按照正常的定义方式#define week num一个一个去定义,然后利用switch语句去查询的方式实现代码如下:
利用宏定义方式实现星期查询 大家可以自己运行代码尝试一下,这里结果不做展示。
这种方式实现查询是没有问题的,但是过多的宏名定义占用资源而且让代码看起来非常冗余。c语言提供了一种枚举(enum)类型,能够列出所有可能的取值,并给它们取一个名字。
枚举类型的定义
按照c语言的要求可以进行如下定义
enum typename { valuename1, valuename2, valuename3, ...... };
enum是一个新的关键字,专门用来定义枚举类型;
typename是枚举类型的名字;
valuename1, valuename2, valuename3, ......是每个值对应的名字的列表。
注意最后的;不能少。
还是按照之前的要求我们去查询客户的星期可以建立如下的枚举:
enum week{ mon, tues, wed, thurs, fri, sat, sun };
这里我们仅仅给出了名字,却没有给出名字对应的值,这是因为枚举值默认从 0 开始,往后逐个加 1(递增);也就是说,week 中的 mon、tues ...... sun 对应的值分别为 0、1 ...... 6。
枚举数据的初始化
枚举数据初始化的几种方式 
1.当我们按照常规的定义时,软件默认的枚举成员从0开始计数依次增加1;
2.在定义名称时对成员进行赋值(注意:这里赋值可以为负数,枚举取值类型:byte、sbyte、short、ushort、int、uint、long 或 ulong )实例代码如下:
enum process{ pro1 = -5, pro2 = -3,pro3 = -1,pro4 = 5 };
3.如果我们需要建立的枚举成员值是从某个数依次增加1,那只需要给第一个成员赋值即可,后面的成员值依次加一,示例代码如下:
enum week{ mon = 1, tues, wed, thurs, fri, sat, sun };
4.枚举是一种类型,通过它可以定义枚举变量,在定义枚举类型的同时定义变量:
enum week{ mon = 1, tues, wed, thurs, fri, sat, sun } a, b, c;
有了枚举变量,就可以把列表中的值赋给它:
enum week{ mon = 1, tues, wed, thurs, fri, sat, sun };
enum week a = mon, b = wed, c = sat;
或者:
enum week{ mon = 1, tues, wed, thurs, fri, sat, sun } a = mon, b = wed, c = sat;
#include int main(){ enum week{ mon = 1, tues, wed, thurs, fri, sat, sun } day; scanf(%d, &day); switch(day){ case mon: puts(monday); break; case tues: puts(tuesday); break; case wed: puts(wednesday); break; case thurs: puts(thursday); break; case fri: puts(friday); break; case sat: puts(saturday); break; case sun: puts(sunday); break; default: puts(error!); } return 0;}
使用说明
1) 枚举列表中的 mon、tues、wed 这些标识符的作用范围是全局的,不能再定义与它们名字相同的变量。
2) 枚举中的成员都被替换成了对应的数字,它们不占用数据区(常量区、全局数据区、栈区和堆区)的内存,而是直接被编译到命令里面,放到代码区,所以不能用&取得它们的地址,这就是枚举的本质。

OMDIA预测2020年OLED电视的出货量将为350万台
洲明集团总冠名2022长三角 • 中部地区照明科技论坛
热电偶测温
中国室外LED照明市场成长空间巨大
DAC和AOC,谁将是数据通信领域赢家?
C语言中枚举精讲分析
大功率三极管的符号大全及含义介绍
英特尔新出AI工具包将全面提升FPGA能力
介绍一种使用2D材料进行3D集成的新方法
维修不再等待!宽厚板轧机牌坊配合面磨损现场快速修复
四种单片机按键软硬件设计方案介绍
NAS网络存储器的网站浏览器支持
ME300实例-1602LCD显示步进电机键控正反转实验-C
荣耀YOYO音箱拆解:4600分AI智商如何炼成?
博世计划裁员约1200人,自动驾驶发展不及预期为主要原因
南昌将造铁路电气化牵引变压器
CES 2016,LG展示强大的OLED和LCD实力
顺丰供应链亮相2023中国工博会行业论坛 分享高效供应链背后的数字化支撑
芯片缺陷失效分析的主要目的
腾龙光谷数据中心开工 投资达105亿元