C语言学习笔记---枚举类型enum

x33g5p2x  于2021-11-09 转载在 其他  
字(2.5k)|赞(0)|评价(0)|浏览(465)

枚举类型通常用来存放整形常量。可以使用enum关键字来创建一个"新的类型",用来表示一组关系比较密切的整形常量。

可以这样声明:

enum spectrum { red,orange,yellow,green,blue,violet	};
enum spectrum color;

第一条语句声明创建了spectrum 作为标记名,允许把enum spectrum作为一个类型名使用。第二条语句声明了将 color作为该类型的变量。在第一条语句中依次列举了spectrum 变量可能有的值,因此color的值可能是red,orange,yellow,green,blue,violet这些等。比如要给color赋值时,可以这样操作:

color = green;

下面使用整形来打印这些枚举类型的值。

printf("%d %d %d %d %d %d\r\n",red,orange,yellow,green,blue,violet);

打印结果如下:

  通过打印的结果可以发现,枚举类型的默认值都是从0开始的,如果不想使用默认的值,也可以直接给枚举类型赋值。

enum spectrum { red = 10,orange,yellow,green,blue,violet };	
printf("%d %d %d %d %d %d\r\n",red,orange,yellow,green,blue,violet);

将第一个枚举常量的值修改为10,打印结果如下:

  这里只对第一个枚举常量赋值,但是后面的枚举常量的值会依次递增。继续修改代码如下:

enum spectrum { red = 1,orange,yellow,green = 10,blue,violet	};
printf("%d %d %d %d %d %d\r\n",red,orange,yellow,green,blue,violet);

打印结果如下:

  通过打印结果可以发现,只要前面的枚举类型值发生了改变,那么后面紧跟着的枚举类型值就会自动加1。

通过使用枚举类型,可以提高程序的可读性和维护性。比如下面的代码:

int main()
{
	enum spectrum { red,orange,yellow,green,blue,violet	};
	enum spectrum color;
	color = green;
	switch(color)
		{
			case red:
				puts("color is red!");
				break;
			case orange:
				puts("color is orange!");
				break;
			case yellow:
				puts("color is yellow!");
				break;
			case green:
				puts("color is green!");
				break;
			case blue:
				puts("color is blue!");
				break;
			case violet:
				puts("color is violet!");
				break;
		}

	system("pause");
	return 0;
}

通过枚举类型来表示使用的各种颜色,这样在阅读代码的时候,通过名称就可以清晰的看出所使用的颜色,如果将枚举类型改成用整数0、1、2、3来表示的话,代码阅读起来就比较困难,必须借助于注释才能明白代码的具体含义。

当然也可以将枚举类型改成宏定义来实现,上面的代码可以修改如下:

#define red 0
#define orange 1
#define yellow 2
#define green 3
#define blue 4
#define violet 5

int main()
{
	int color;
	color = green;
	switch(color)
		{
			case red:
				puts("color is red!");
				break;
			case orange:
				puts("color is orange!");
				break;
			case yellow:
				puts("color is yellow!");
				break;
			case green:
				puts("color is green!");
				break;
			case blue:
				puts("color is blue!");
				break;
			case violet:
				puts("color is violet!");
				break;
		}
	system("pause");
	return 0;
}

通过宏定义的方式也可以实现同样的功能,但是宏定义是代码看起来比较松散,而且定义的变量比较多,修改起来也比较麻烦。而且枚举变量还有一个优势就是可以进行自增或者自减运算。

int main()
{
	enum spectrum { red,orange,yellow,green,blue,violet	};
	int color;
	for(color = red; color<=violet; color++)
		switch(color)
			{
				case red:
					puts("color is red!");
					break;
				case orange:
					puts("color is orange!");
					break;
				case yellow:
					puts("color is yellow!");
					break;
				case green:
					puts("color is green!");
					break;
				case blue:
					puts("color is blue!");
					break;
				case violet:
					puts("color is violet!");
					break;
			}

	system("pause");
	return 0;
}

在循环中依次给color赋值,然后打印当前的颜色。接着color的值自增1,打印结果如下:

  通过自增或者自减的运算,使枚举类型应用起来更加灵活。

相关文章