C语言 枚举和结构体的区别(以及枚举应用实例)

枚举类型就相当于助记符,帮助程序员记忆的。

比如现在要画一张地图,用到红黄蓝绿四种颜色。为了存储方便,我们规定0=红,1=黄,2=蓝,3=绿。但是当编程到某一阶段时,程序员可能忘记了哪个数字具体对应哪种颜色,或者忘记了到底有多少个数字,这时他就要去查表,这样会耽误时间。此时就可以定义一个枚举类型enum color{Red,Yellow,Blue,Green},这样系统就会自动将0、1、2、3和这个枚举类型中的每个元素一一对应起来,程序员只需要记住"Red"、"Green"等单词即可,而且不会出现“4”之类的定义之外的数字。

但枚举类型使用起来也有很多限制,它是一种单独的数据类型,因此不能简单像数组那样操作,而且经常要用到类型转换。

枚举类型默认为是int类型,并默认为从0,1,2,3…递增排序,也可为属性赋值,也可改变枚举类型的int类型(如将其换成byte来减少内存的消耗)

结构体可以将有限个不同类型的属性变量组合在一起,与枚举类型不同之处是枚举类型内的都是同类型的属性变量,并且结构体可以有结构函数

在程序中,可能需要为某些整数定义一个别名,我们可以利用预处理指令#define来完成这项工作,您的代码可能是:

#define MON   1
#define TUE   2
#define WED   3
#define THU   4
#define FRI   5
#define SAT   6
#define SUN   7

在此,我们定义一种新的数据类型,希望它能完成同样的工作。这种新的数据类型叫枚举型。

以下代码定义了这种新的数据类型 - 枚举型

enum DAY
{
      MON=1, 
      TUE, 
      WED, 
      THU, 
      FRI, 
      SAT, 
      SUN
};

(1) 枚举型是一个集合,集合中的元素(枚举成员)是一些命名的整型常量,元素之间用逗号,隔开。

(2) DAY是一个标识符,可以看成这个集合的名字,是一个可选项,即是可有可无的项。

(3) 第一个枚举成员的默认值为整型的0,后续枚举成员的值在前一个成员上加1。

(4) 可以人为设定枚举成员的值,从而自定义某个范围内的整数。

(5) 枚举型是预处理指令#define的替代。

(6) 类型定义以分号;结束。

用typedef关键字将枚举类型定义成别名,并利用该别名进行变量声明:

typedef enum workday
{
    saturday,
    sunday = 0,
    monday,
    tuesday,
    wednesday,
    thursday,
    friday
} workday; 

此处的workday为枚举型enum workday的别名

实际应用举例

typedef enum hiARG_TYPE_E
{
    /** ARG_TYPE_NO_PARA / ARG_TYPE_NO_OPT only canbe select one of them */
    /** ARG_TYPE_STRING /ARG_TYPE_CHAR /ARG_TYPE_INT / ARG_TYPE_FLOAT only canbe select one of them */
    ARG_TYPE_MUST       = 1,   /* Required Arg */
    ARG_TYPE_NO_OPT     = 2,   /* No option is allowed(-XXX), only one parameter */
    ARG_TYPE_NO_PARA    = 4,   /* Single, no parameter */
    ARG_TYPE_STRING     = 8,   /* String */
    ARG_TYPE_CHAR       = 16,  /* Char */
    ARG_TYPE_INT        = 32,  /* Interger */
    ARG_TYPE_FLOAT      = 64,  /* Float */
    ARG_TYPE_HELP       = 128, /**/
    ARG_TYPE_SINGLE     = 256, /* Solo Option, or return parse error */
    ARG_TYPE_END        = 512,
    ARG_TYPE_BUTT       = 1024,
    ARG_TYPE_4BYTE      = 0xFFFFFFFF
} ARG_TYPE_E;

在这里插入图片描述

  • 5
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式Linux系统开发

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值