枚举
前面我们分别介绍了两种自定义类型,分别是结构体和位段,今天我们来介绍另一种自定义类型枚举。
当然这一节的内容比较简单。
目录
一、定义
枚举在C/C++/c#中,是一个被命名的整型常数的集合, 枚举在日常生活中很常见。
例如表示星期的SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY,
SATURDAY,就是一个枚举。
简单的讲,枚举就是把一个事物的可能一一列举,
例如:月份有一到十二个月可一一列举;星期也可以列举等等。
我们看一下C语言中枚举长什么样子,我们以性别为例,请看下面代码片段:
enum sex{
MALE,//男性
FEMALE,//女性
SECRET//保密
};
二、C语言中枚举的本质是什么?
C语言中枚举其实等价于整型变量,
我们可以这样测试:
int main(){
printf("MALE = %d\n", MALE);
printf("FEMALE = %d\n", FEMALE);
printf("SECRET = %d\n", SECRET);
return 0;
}
结果为:
可见C语言中枚举类型确实是以 int 型存储的,而且有这样的规则:我们仅仅给出了名字,却没有给出名字对应的值,因为枚举值默认从 0 开始,往后逐个加 1(递增)
正是因为枚举实际上是 int 型的数据,所以我们可以在定义一个枚举时给它赋予不同的值。如下:
#include <stdio.h>
enum sex{
MALE,//男性
FEMALE = 20 ,//女性
SECRET//保密
};
int main(){
printf("MALE = %d\n", MALE);
printf("FEMALE = %d\n", FEMALE);
printf("SECRET = %d\n", SECRET);
return 0;
}
此时输出的结果为:
下面我们继续测试,如果我们尝试修改MALE的值会发生什么情况?
可见,枚举的值可理解为一个 int 型的常量。
三、枚举的优点
我们可以使用 #define 定义常量,为什么要用枚举呢?
1、增加代码的可读性和可维护性 ;
2、和#define定义的标识符比较枚举有类型检查,更加严谨;
3、防止了命名污染(封装);
4、 便于调试 ;
5、使用方便,一次可以定义多个常量。
我们看下面一段代码就会一目了然
#include <stdio.h>
int main(){
enum color { red=1, green, blue };
enum color favorite_color;
/* 用户输入数字来选择颜色 */
printf("请输入你喜欢的颜色: (1. red, 2. green, 3. blue): ");
scanf("%u", &favorite_color);
/* 输出结果 */
switch (favorite_color){
case red:
printf("你喜欢的颜色是红色");
break;
case green:
printf("你喜欢的颜色是绿色");
break;
case blue:
printf("你喜欢的颜色是蓝色");
break;
default:
printf("你没有选择你喜欢的颜色");
}
return 0;
}
这段代码的可读性就很高。
今天的分享就到这里了,希望大家一起提高。