C语言自定义类型【枚举】

本文详细介绍了C语言中的枚举类型,包括枚举的声明、赋值、特殊说明、定义和使用。枚举提供了一种定义命名常量的方式,增强了代码的可读性和可维护性,避免了#define的冗长和不便。枚举类型默认被视为int类型,可以通过枚举变量进行有条件遍历。文章通过实例展示了枚举如何声明、赋值并输出其值,强调了枚举在特定场景下,如表示月份等,相较于#define的优越性。
摘要由CSDN通过智能技术生成

🚠订阅专栏:自定义类型

🚜关注博主:翻斗花园第一代码手牛爷爷

🚙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种方式。

  1. 先声明,后定义
  2. 声明的同时定义
  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相比较枚举有类型检查,更加严谨。
  • 防止命名污染(封装)。
  • 便于调试。
  • 使用方便,一次可以定义多个常量。

🚚总结

枚举的使用较为简单,应用场景也比较少,很多时候不用枚举也是可以解决问题的,因此很多人都认为枚举非常的鸡肋,但是枚举的优点也是不容忽视的,合理的运用枚举可以帮助我们写出更加完美易懂的代码。本文章是博主的所学所感的总结,如有错误之处还望指正,欢迎评论区中留言

 

评论 27
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

拖拉机厂第一代码手

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值