0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

C语言中枚举精讲分析

嵌入式应用开发 来源:嵌入式应用开发 作者:嵌入式应用开发 2022-03-02 10:58 次阅读

在使用带有数字性质的名称时有的时候需要用到枚举的方式进行定义函数名字,按照对应的数字格式来对应相应的名称。枚举成员的值是常量不是变量。
我们首先讲解一下枚举与结构体的区分,结构体是不同数据整合到一起形成的数据团,需要哪个结构体中的成员按照结构体成员的调用的方式即可。在枚举中,枚举中的成员都是按照从0,1,2...往下排的。
假如我们想告诉用户今天是星期几,可能按照正常的定义方式#define week num一个一个去定义,然后利用switch语句去查询的方式实现代码如下:

poYBAGId5zWAM5VuAABvCUVJRFA974.png

利用宏定义方式实现星期查询

大家可以自己运行代码尝试一下,这里结果不做展示。
这种方式实现查询是没有问题的,但是过多的宏名定义占用资源而且让代码看起来非常冗余。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;
}

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

    关注

    5068

    文章

    19008

    浏览量

    302971
  • C语言
    +关注

    关注

    180

    文章

    7597

    浏览量

    136119
收藏 人收藏

    评论

    相关推荐

    C语言中枚举的基本概念和常见用法

    C语言中枚举是一种方便组织和表示一组相关常量的工具。枚举类型有助于提高代码的可读性和可维护性。本文将介绍C
    发表于 08-17 15:32 1370次阅读

    详细讲解c语言enum枚举类型

    详细讲解C语言enum枚举类型在实际应用中,有的变量只有几种可能取值。如人的性别只有两种可能取值,星期只有七种可能取值。在 C 语言中对这样
    发表于 12-21 23:22

    C语言0基础入门视频教程分享

    今天在这里分享给0基础入门朋友们一个C语言视频教程,视频主要从C语言基础部分开始讲解,可以很
    发表于 05-09 15:58

    51单片机C语言应用程序设计实例part03

    51单片机C语言应用程序设计实例(第二版),part03。
    发表于 05-20 14:28 30次下载

    51单片机C语言应用程序设计实例(第二版)part05

    51单片机C语言应用程序设计实例(第二版),part05
    发表于 05-20 14:28 0次下载

    51单片机C语言应用程序设计实例(第二版)part06

    51单片机C语言应用程序设计实例(第二版),part06
    发表于 05-20 14:28 0次下载

    MSP430单片机C语言应用程序设计实例一书中的程序

    MSP430单片机C语言应用程序设计实例一书中的程序
    发表于 05-25 10:51 62次下载

    枚举C语言中的一种基本数据类型

    C语言中枚举类型是被当做 int 或者 unsigned int 类型来处理的,所以按照 C 语言规范是没有办法遍历
    的头像 发表于 09-25 15:45 8624次阅读
    <b class='flag-5'>枚举</b>是<b class='flag-5'>C</b><b class='flag-5'>语言中</b>的一种基本数据类型

    51单片机C语言应用程序实例的代码合集免费下载

    本文档的主要内容详细介绍的是51单片机C语言应用程序实例的代码合集免费下载。
    发表于 01-15 16:15 213次下载
    51单片机<b class='flag-5'>C</b><b class='flag-5'>语言</b>应用程序实例<b class='flag-5'>精</b><b class='flag-5'>讲</b>的代码合集免费下载

    MSP430单片机C语言应用程序设计实例(秦龙)

    MSP430单片机C语言应用程序设计实例
    发表于 06-21 15:53 8次下载

    go语言枚举类型怎么用

    go 语言枚举类型是这么用的?在什么场景下会用到枚举?本文对 go 语言枚举做了详细讲解。 枚举
    的头像 发表于 09-02 09:43 5141次阅读

    MSP430单片机C语言应用程序设计实例图书

    MSP430单片机C语言应用程序设计实例图书
    发表于 02-17 15:10 58次下载

    C语言枚举简述

    C语言中,如果一个变量只有几种可能的值,则可以定义为枚举类型,所谓“枚举”就是指把可能的值一一列举出来,变量的值只限于列举出来的值的范围内。
    的头像 发表于 03-24 15:15 754次阅读

    如何解决C语言中的“访问权限冲突”异常?C语言引发异常原因分析

    如何解决C语言中的“访问权限冲突”异常?C语言引发异常原因分析  在C
    的头像 发表于 01-12 16:03 5016次阅读

    枚举有多大?c语言枚举end的作用是什么?

    枚举有多大?c语言枚举end的作用是什么? 枚举C语言中
    的头像 发表于 01-19 14:19 557次阅读