枚举就是把一个事物所有可能的值一一列举出来
一个变量只有几种可能得值,比如星期,只有星期一二三四五六日
定义一个枚举类型,再定义一个这个类型的变量w
:
#include <stdio.h>
enum WeekDay {sun,mon,tues,wed,thur,fri,sat};
int main(void)
{
enum WeekDay w;
return 0;
}
枚举的一些性质:
-
以星期为例,在下面代码中编译器会把
sun
、mon
、tues
、wed
、thur
、fri
、sat
的值按照顺序分别默认为等于0、1、2、3、4、5、6:#include <stdio.h> enum WeekDay {sun,mon,tues,wed,thur,fri,sat}; int main(void) { enum WeekDay w; w = mon; printf("w = %d\n",w);//输出结果:w = 1 return 0; }
值得一提的是,当赋给w枚举元素以外的值时(如
w = 'a'
,或者w = 10;
等),编译器并不会报错(本人使用的是gcc编译器),且能正常输出w的值。 -
枚举元素的默认值可以更改:
#include <stdio.h> enum WeekDay {sun=7, mon,tues,wed,thur,fri,sat}; int main(void) { enum WeekDay w; w = sun; printf("w = %d\n",w);//输出结果:w = 7 return 0; }
上面代码把枚举元素
sun
的默认值改为7,则sun
后面的mon
、tues
、wed
、thur
、fri
、sat
的值默认值也会分别变为8、9、10、11、12 -
如果只改变中间某个枚举元素的默认值:
#include <stdio.h> enum WeekDay {sun, mon,tues,wed=13, thur,fri,sat}; int main(void) { enum WeekDay w; w = sun; printf("w = %d\n",w);//输出结果:w = 0 w = thur; printf("w = %d\n",w);//输出结果:w = 14 return 0; }
-
两个
enum
类型不能有重复的枚举元素:#include <stdio.h> enum WeekDay1{sun,mon,tues,wed}; enum WeekDay2{wed,thur,fri,sat}; int main(void) { enum WeekDay1 w1; enum WeekDay2 w2; w1 = mon; w2 = sat; return 0; }
上方代码会报错:
error: redeclaration of enumerator 'wed'
-
以星期为例,在定义的时候也可以像结构体或共用体一样直接定义出变量(但是一般不推荐这样):
#include <stdio.h> enum WeekDay {sun,mon,tues,wed,thur,fri,sat}w1,w2; int main(void) { w1 = mon; w2 = sun; return 0; }
如果像上方代码一样,紧接着直接定义出变量,此时enum后面的名称也可以忽略不写(一般也不推荐这样):
#include <stdio.h> enum {sun,mon,tues,wed,thur,fri,sat}w1,w2; int main(void) { w1 = mon; w2 = sun; return 0; }