欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-04-11 17:47:00
...

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

比如现在要画一张地图,用到红黄蓝绿四种颜色。为了存储方便,我们规定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;

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

相关标签: C/C++