目录
枚举的意义:
- 1.常量 int 名字 值(0 1 2 3)
- 当我们需要一些排列起来的常量值,定义枚举的意义就是赋予常量值名字
常量符号化
- 在程序中我们经常避免直接出现数字,用具体的单词或者别的能表达意思的字符串代替,这样可以大幅提升可读性。
- 比如用单词代替数字
枚举
概念解释
- 枚举是一种用户定义的数据类型,它用关键字enum来声明,定义枚举是给一些常量赋名:enum 枚举名 {名字0,名字1,...,名字n}; 也可以指定值(枚举量)
- 使用时大多会将枚举名省去,因为它并不真的使用,括号内的名字才更加重要。
- 括号内实际上是常量符号,类型是int,值依次从0到n递增
程序例子
#include <stdio. h>
enum color { red, yellow, green};
//枚举类型要跟上enum,无论是函数的参数表里还是变量里(C语言中规定)
//这里是函数参数表
void f(enum color c);
int main(void)
{
//枚举量可以作为值
enum color t = red;
//实际上,red就是0,C语言内部以整数来处理它
scanf("%d", &t);
f(t);
return 0;
}
void f(enum color c)
{
printf("%d\n",c);
}
输入 输出/ 2 2/ 3 3/ 55 55
- 枚举量可以作为值
- 枚举类型可以跟上enum作为类型
- 但实际上是以整数来做内部计算和外部输出的
小套路:自动计数的枚举
- 枚举内部计数规则和数组一样,从0开始计数,因此如果在元素最后加一个名字,这个名字代表的数字就是前面名字的计数量。
- 比如 enum color { red, yellow, green,NumColors}; //NumColors代表3,前面正好3个元素
- 此时如果需要遍历所有枚举量、或者需要建立用枚举量做下标的数组时,就可以轻松得知枚举量的个数。
#include <stdio.h> enum COLOR {RED,YELLOW, GREEN, NumCOLORS}; int main(int argc, char const *argv[]) { int color = -1; //可以用NumColors建立数组 char *ColorNames [NumCOLORS] = { "red", "yellow", "green", }; char *colorName = NULL; printf("输入你喜欢的颜色的代码: "); scanf("%d", &color); //可以用NumColors作为判断依据 if ( color >=0 && color < NumCOLORS ) { colorName = ColorNames [color] ; } else { colorName= "unknown" ; } printf ("你喜欢的颜色是%s\n",colorName); return 0; }
char *ColorNames [NumCOLORS] = {
"red", "yellow", "green", };
字符串数组
枚举量
- 在声明枚举量的时候可以不按默认原则,自定义值
enum COLOR {RED=1,YELLOW, GREEN=5 };
//此时yellow=2
- 枚举量只是int类型(但是给枚举量赋超过int的整数也不会报错,或者0)
- 虽然枚举类型可以当成类型使用,但不好用。。。
- 意义上有排比的名字,用枚举比const int方便,不用一行一行写
- 枚举比宏(macro)好,因为枚举有int类型,宏没有类型
- 枚举的主要用途就是拿来定义一些符号量,而不是当一种类型