Bootstrap

【C语言】枚举类型(enum)

前言

在本文,我们将学习一个自定义的类型——枚举。相信很多读者听到这个并不会感觉到陌生,那么本文就来着重跟大家聊一聊何为枚举类型,能用枚举类型干什么事。
话不多说,让我们开始本次精彩的学习吧!💖💖💖

1. 枚举的含义

在开始正式学习枚举类型之前,我们得先了解一下何为“枚举”?
所谓枚举顾名思义就是一一列举。把所有可能的值都一一列举出来。

比如:在一个星期内,有星期一、星期二、星期三、星期四、星期五、星期六、星期日,共七天,这个星期是能一一列举出来的
再如:血型,有A型、AB型、B型、O型、熊猫血,这个血型也是能够列举出来的。

说得抽象一点的话,就是在一个有限的集合中,将这个集合里面的值都一一列举出来,而这个集合就属于枚举类型。

2. 枚举类型的声明

在讲完枚举的含义之后,我们就来认识一下,在C语言中是如何声明一个枚举类型的。
举例:

enum Day/星期
{
	Mon,
	Tues,
	Wed,
	Thur,
	Fri,
	Sat,
	Sun
};
enum Sex
{
	Male,
	Female,
	Secret
};
enum Color
{
	RED,
	GREEN,
	BLUE
};

注意:这里跟结构体的声明还是有点差别的,请读者在声明枚举类型时注意细节。

以上定义的enum Day,enum Sex,enum Color都是枚举类型。
{}里面的值就是枚举类型可能取值,也叫做枚举常量
这些可能的取值都是有值的,默认是从0开始,依次递增1。当然在声明枚举类型的时候可以给枚举常量赋初值。

enum Color
{
	RED=2,
	GREEN=4,
	BLUE=8
};

可能有的读者对上面的一句话:枚举常量默认是从0开始的,依次递增1,这句话可能有点疑惑。
不过没有关系,请看下面的图,你就理解了:
枚举类型
有可能出现别的情况:
依次递增1
根据上面的例子,你可能就懂了,当我们需要给枚举常量一个初值时,可以完全按照我们自己的意愿来进行设置。

3. 枚举类型的优点

细心的读者可能已经发现了,这个不是可以用#define定义一个常量,为什么非得要用枚举?
举个例子:

enum Color
{
	RED,
	GREEN,
	BLUE
};

能不能等价为?

#define RED 0
#define GREEN 1
#define BLUE 2

浅浅的看一下,效果是一样的,可是枚举有潜在的优势。

枚举的优势:

  1. 增加代码的可读性和可维护性
  2. 和#define定义的标识符⽐较枚举有类型检查,更加严谨。
  3. 便于调试,预处理阶段会删除 #define 定义的符号
  4. 使⽤⽅便,⼀次可以定义多个常量
  5. 枚举常量是遵循作⽤域规则的,枚举声明在函数内,只能在函数内使⽤

4. 枚举类型的使用

enum Color
{
	RED,
	GREEN,
	BLUE
};

enum Color clr = GREEN;//使用枚举常量给枚举变量赋值

注意:一旦枚举常量的值确定下来之后,就不可以更改其值了。

那我们是否可以拿整数给枚举变量赋值呢?在C语言中时允许的,但在C++中时不行的,C++对于类型的检查是比较严格的。

;