【C语言笔记】枚举

首先,提一下宏定义#define,其一般形式为:

#define 宏名 字符串

这个知识点很重要,到处能用得到。其可以与typedef来进行类比进行理解(可查看#define与typedef的区别?)。除此之外,其还可以与enum进行类比。

什么是枚举

从字面理解,就是一一列举的意思。很多时候,有一些数据的取值有限的,这时候可以把这些可能的结果列出来,并赋予新的名字,这样有助于提高代码的可读性。例如,一个星期有7天,一年有12个月,期末考试科目有6个科目等情况,完全可以一一列举出来。

当我们要为整数定义一些别名(例如定义为星期数)的时候,可以使用宏定义,如:

#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
};

其中,enum是关键字,是必须的。DAY是枚举名,可有可无,这个名字是自己定义的;MON=1, TUE, WED, THU, FRI, SAT, SUN是枚举成员。

枚举成员的值是根据前一个成员的值递增1,即上面枚举定义等价于:

enum DAY
{
    MON=1, TUE=2, WED=3, THU=4, FRI=5, SAT=6, SUN=7
};

若上述定义中第一个成员MON不赋值的话,那么其默认为0。

若其他成员赋了初值,也是遵循“枚举成员的值是根据前一个成员的值递增1”这一规则,如:

enum DAY
{
   A,B,C=100,D,F=200,G
};

此处

A=0
B=1
C=100
D=101
F=200
G=201
枚举类型变量的定义方法
1
方法一
enum DAY
{
    MON=1, TUE, WED, THU, FRI, SAT, SUN
};

enum DAY good_day, bad_day;

此处,DAY是枚举名,相当于一个模板,可以使用这个模板去定义变量good_day,bad_day,定义的时候不要忘了enum。

1
方法二
enum
{
   MON=1, TUE, WED, THU, FRI, SAT, SUN
}good_day, bad_day;

相对于方法一,此处省略了枚举名。虽然更简洁了,但是因为没有了名字,后面就不能用该枚举定义新的变量。

1
方法三
typedef enum DAY
{
   MON=1, TUE, WED, THU, FRI, SAT, SUN
}DAY;

DAY good_day, bad_day;

此处使用typedef为枚举定义一个别名,这个别名为DAY,关于typedef的介绍可点击文首的链接进行查看。

程序实例

编译环境为 : gcc 6.3.0

#include <stdio.h>

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

int main(void)
{
 DAY good_day;
 printf("你觉得一周中哪一天最美好?\n");
 scanf("%d", &good_day);
 printf("我比较喜欢");
 switch(good_day)
 {
 case MON: printf("星期一"); break;
 case TUE: printf("星期二"); break;
 case WED: printf("星期三"); break;
 case THU: printf("星期四"); break;
 case FRI: printf("星期五"); break;
 case SAT: printf("星期六"); break;
 case SUN: printf("星期日"); break;
 default:  printf("Error!"); break;
 }

return 0;
}

程序运行结果:

枚举变量占用的字节数?

实测程序:

#include <stdio.h>

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

int main(void)
{
 DAY good_day;
 
 printf("sizeof(DAY) = %d\n",sizeof(DAY));
 printf("sizeof(good_day) = %d\n",sizeof(good_day));
 printf("sizeof(int) = %d\n",sizeof(int));

return 0;
}

运行结果:

从该程序运行结果也可看出,枚举类型变量需要存放的是一个整数,它的长度和int的长度相同。

以上就是关于枚举类型enum的一些笔记,如有错误欢迎指出。

最后,分享两篇关于枚举的文章,都讲得很详细。

https://www.cnblogs.com/JCSU/articles/1299051.html

http://c.biancheng.net/cpp/html/99.html

(0)

相关推荐

  • c语言学习笔记(八:struct、union、enum、typedef

    自定义数据类型 1.struct 1)结构体的声明 声明结构体变量:结构体所占内存大小是其成员所占内存之和. struct 结构体类型名{//结构体类型名可省略,匿名结构体 成员表://可以有多个成员 ...

  • C语言笔记-双向链表和循环链表

    两种链表的增删改查操纵类似于单向链表. 双向链表: 一种更复杂的链表是"双向链表"或"双面链表".每个节点有两个连接:一个指向前一个节点,(当此"连接 ...

  • 辛苦整理的C语言笔记,还好没放弃

    c语言入门 C语言一经出现就以其功能丰富.表达能力强.灵活方便.应用面广等特点迅速在全世界普及和推广.C语言不但执行效率高而且可移植性好,可以用来开发应用软件.驱动.操作系统等.C语言也是其它众多高级 ...

  • 【C语言笔记】时间日期函数

    常持正念方圆梦,不忘初心总是春. /********前言********/ time.h是C/C++中的日期和时间头文件.用于需要时间方面的函数.下面分享time.h头文件中几个常用函数的用法: /* ...

  • 【C语言笔记】关于随机数的总结

    C语言的库头文件stdlib.h中有个生成随机数的函数: int rand(void); 该函数返回0~RAND_MAX之间的随机数,在stdlib.h中可知道,RAND_MAX为0x7FFF,如: ...

  • 【C语言笔记】变参函数

    提到变参函数,我们的感觉是不是既熟悉又陌生 ?感觉熟悉是因为我们平时都在使用着,如我们常使用的printf()函数与scanf()函数就是典型的变参函数.因为printf()函数是变参函数我们才可以根 ...

  • 【C语言笔记】ASCII码可见字符与不可见字符

    ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧 ...

  • 【C语言笔记】什么是ANSI C标准?

    我们在很多地方都有看到过K&R C.ANSI C.ISO C.C89.C99.C11等标准,具体有什么不同呢?(文末有个很好的实例) 什么是K&R C? 1978年,丹尼斯·里奇(De ...

  • 【C语言笔记】如何查看数据类型范围?

    知识点一:查看整数范围 当前的编译环境下,你可能不知道int的数据范围是多少,或者记不清无符号短整型的范围是0~65535还是0~65536?这时候就可以按照如下程序进行输出查看: #include ...

  • 【C语言笔记】分享一个C语言测试程序模板

    前言 平时需要测试一些比较模糊的知识点,或则想要验证一些函数时,我们常常会建一个test.c文件,然后在这个文件里写我们的测试代码,测试完毕后常常会删掉该文件.下次再遇到同样的问题的时候,可能又是记不 ...