🚠订阅专栏:自定义类型
🚜关注博主:翻斗花园第一代码手牛爷爷
🚙gitee仓库:牛爷爷爱写代码
目录
🚗枚举介绍
续上前一篇,我们现在来介绍另一种自定义类型——枚举。枚举是C语言中的一种基本数据类型,枚举类型是由基础整型数值类型的一组命名常量定义的值类型。
🚍枚举的声明及赋值
枚举的声明形式为:
enum enum_type
{
data1,
data2,
data3,
......
};
在枚举的的声明时,可以给成员进行赋值,如果不进行赋值的话,默认为按顺序从第一个开始为整型0,第二个为整型1,第三个为整型2,这样依次加一,如下代码。
enum month
{
day1,
day2,
day3,
day4,
day5,
day6,
day7,
day8
};
示意图如下。
如果给成员进行赋值的话,那么被赋值成员前面的按默认赋值方式进行赋值,后面的成员在被赋值成员的基础上依次加一,如下代码。
enum month
{
day1,
day2,
day3,
day4 = 8,
day5,
day6,
day7,
day8
};
示意图如下。
是不是我们示意图这样的呢?我们分别运行如下代码观察结果。
不赋值代码:
enum month
{
day1,
day2,
day3,
day4,
day5,
day6,
day7,
day8
};
int main()
{
printf("%d\n", day1);
printf("%d\n", day2);
printf("%d\n", day3);
printf("%d\n", day4);
printf("%d\n", day5);
printf("%d\n", day6);
printf("%d\n", day7);
printf("%d\n", day8);
return 0;
}
运行结果如下图所示。
赋值代码:
enum month
{
day1,
day2,
day3,
day4 = 8,
day5,
day6,
day7,
day8
};
int main()
{
printf("%d\n", day1);
printf("%d\n", day2);
printf("%d\n", day3);
printf("%d\n", day4);
printf("%d\n", day5);
printf("%d\n", day6);
printf("%d\n", day7);
printf("%d\n", day8);
return 0;
}
运行结果如下图所示。
🚒特殊说明
在C 语言中,枚举类型是被当做 int 或者 unsigned int 类型来处理的,所以按照 C 语言规范是没有办法遍历枚举类型的,不过在一些特殊的情况下,枚举类型必须连续是可以实现有条件的遍历。
列如,在如下代码中是可以使用for循环遍历。
enum month
{
day1,
day2,
day3,
day4,
day5,
day6,
day7,
day8
}mon;
int main()
{
for (mon = day1; mon <= day8; mon++)
{
printf("%d\n", mon);
}
return 0;
}
运行结果如下图。
🚓枚举的定义
在完成了枚举的声明后,接下来我们就要进行枚举的定义,枚举的定义有如下3种方式。
- 先声明,后定义
- 声明的同时定义
- 省略枚举名称,直接定义
下面我们一一介绍这3种方式。
1.先声明,后定义
定义时我们要先定义枚举类型,后定义枚举变量。
如下代码。
enum month
{
day1,
day2,
day3,
day4,
day5,
day6,
day7,
day8
};
enum month mon;
2.声明的同时定义
将定义的枚举变量直接写在声明的末尾。
enum month
{
day1,
day2,
day3,
day4,
day5,
day6,
day7,
day8
}mon;
3. 省略枚举名称,直接定义
声明时不写类型名称,并且把定义的变量写在声明的末尾。
enum
{
day1,
day2,
day3,
day4,
day5,
day6,
day7,
day8
}mon;
🚑枚举的使用
那我们在什么时候用到枚举比较合适呢?
首先我们先来设想一种场景,我们需要用到一年的12个月份,出于对代码的可维护性,如果我们define的话,那就像下面代码一样。
#define Jan 1
#define Feb 2
#define Mar 3
#define Apr 4
#define May 5
#define Jun 6
#define Jul 7
#define Aug 8
#define sep 9
#define Oct 10
#define Nov 11
#define Dec 12
这样写的话不仅使得代码显得冗长,并且写起来十分麻烦。这个时候我们用枚举就比较合适,如下代码。
enum year
{
Jan = 1,
Feb,
Mar,
Apr,
May,
Jun,
Jul,
Aug,
Sep,
Oct,
Nov,
Dec
};
相比起来,枚举就显得简洁不少。
🚐枚举的优点
- 增加代码的可读性和可维护性。
- 和#define相比较枚举有类型检查,更加严谨。
- 防止命名污染(封装)。
- 便于调试。
- 使用方便,一次可以定义多个常量。
🚚总结
枚举的使用较为简单,应用场景也比较少,很多时候不用枚举也是可以解决问题的,因此很多人都认为枚举非常的鸡肋,但是枚举的优点也是不容忽视的,合理的运用枚举可以帮助我们写出更加完美易懂的代码。本文章是博主的所学所感的总结,如有错误之处还望指正,欢迎评论区中留言