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) 枚举中的成员都被替换成了对应的数字,它们不占用数据区(常量区、全局数据区、栈区和堆区)的内存,而是直接被编译到命令里面,放到代码区,所以不能用&取得它们的地址,这就是枚举的本质。

使用枚举完成实现星期几的查询代码如下:
#include 
int main(){
   enum week{ Mon = 1, Tues, Wed, Thurs, Fri, Sat, Sun } day;
   scanf("%d", &day);
   switch(day){
       case 1: puts("Monday"); break;
       case 2: puts("Tuesday"); break;
       case 3: puts("Wednesday"); break;
       case 4: puts("Thursday"); break;
       case 5: puts("Friday"); break;
       case 6: puts("Saturday"); break;
       case 7: puts("Sunday"); break;
       default: puts("Error!");
   }
   return 0;
}

审核编辑:符乾江
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分