枚举类型的定义
enum typeName{valueName1,valueName2,.......};
enum是一个新的关键字,专门用来定义枚举类型;typeName是枚举类型的名字;valueName1是每个值对应的名字的列表,注意最后;不能少。
使用enum的原因:在实际编程中,有些数据的取值往往是有限的,只能是非常少量的整数,并
且最好为每个值都取一个名字,以方便在后续代码中使用,比如一个星期只有七天,一个月只有十二个月。对于这类问题,一般会使用#define,但是这样做会导致宏名过多,代码松散。C语言提供一种枚举类型(Enum)类型,能够列出所有可能的取值,并给它们取一个名字。
例如:
enum week{Mon, Tues, Wed, Thurs, Fri, Sat, Sun};
我们可以为里面的值赋值,因为枚举值默认从0开始,往后逐个加1;所以,Mon,Tues…对应的值分别为0,1…
我们可以给每个名字都指定一个值:
enum week{Mon=1, Tues=2, Wed,=3 Thurs=4, Fri=5, Sat=6, Sun=7};
也可以直接给第一个值赋值,其他不赋值。
定义枚举变量
枚举是一种类型,可以通过它定义枚举变量:
enum week a,b,c;
也可以在定义枚举类型的同时定义枚举变量:
enum week{ Mon = 1, Tues, Wed, Thurs, Fri, Sat, Sun } a, b, c;
有了枚举变量,就可以把列表中的值赋给它:
enum week{ Mon = 1, Tues, Wed, Thurs, Fri, Sat, Sun };
enum week a = Mon, b = Wed, c = Sat;
需要注意的两点是:
- 枚举列表中的Mon这些标识符的作用范围是全局的(严格来说是main()函数内部),不能再定义与它们名字相同的变量。
- Mon这些都是常量,不能为它们赋值,只能将它们的值赋给其他变量。所以不能用&取得它们的地址。
**枚举和宏非常类似:**宏在预处理阶段的时候将名字替换成对应的值,枚举在编译阶段将名字替换成对应的值。
枚举类型变量需要存放的是一个整数,所以它的长度与int相同。