c语言中的枚举
枚举(或枚举)是C中用户定义的数据类型。它主要用于将名称分配给积分常量,名称使程序易于阅读和维护。
枚举相对来说运用和理解都是比较简单的
我们直接看例子:
// An example program to demonstrate working // of enum in C #include<stdio.h> enum week{Mon, Tue, Wed, Thur, Fri, Sat, Sun}; int main() { enum week day; day = Wed; printf("%d",day); return 0; }
在上面的例子中,通过枚举定义变量day 然后将wed的值赋给day 因为是枚举类型,所以enum中的每个名称的值为0, 1, 2, 3, 4, 5, 6
显然wed值为2 所以day = 2;
看下面这个例子,更加详细的表现了枚举的默认状态
#include<stdio.h> enum year{Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec}; int main() { int i; for (i=Jan; i<=Dec; i++) printf("%d ", i); return 0; }
在此示例中,for循环将从i = 0运行到i = 11,因为i的值最初为Jan,为0,Dec的值为11。
关于枚举初始化的有趣事实
1、如果我们没有为枚举名称显式分配值,编译器默认分配从0开始的值。例如,在以下C程序中,星期日获取值0,星期一变为1,依此类推。
#include <stdio.h> enum day {sunday, monday, tuesday, wednesday, thursday, friday, saturday}; int main() { enum day d = thursday; printf("The day number stored in d is %d", d); return 0; }
想必大家已经知道结果了,没错就是
The day number stored in d is 4
2、我们可以指定值以任何顺序的一些名字,其他没有分配值的名称将前一个名称的值加一
#include <stdio.h> enum day {sunday = 1, monday, tuesday = 5, wednesday, thursday = 10, friday, saturday}; int main() { printf("%d %d %d %d %d %d %d", sunday, monday, tuesday, wednesday, thursday, friday, saturday); return 0; }
结果:1 2 5 6 10 11 12
3、分配给枚举的名称的值必须是一些integeral恒定,即,该值必须在范围从最小可能的整数值到最大可能的整数值。
4、所有枚举常量在其范围内独一无二,例如,以下程序编译失败
enum state {working, failed}; enum result {failed, passed}; int main() { return 0; }
报错:redeclaration of enumerator "failed' 重新确认枚举者
枚举与宏
我们也可以使用宏定义名称常量。例如,我们可以使用以下宏定义“工作”和“失败”。
#define Working 0
#define Failed 1
#define Freezed 2
|
当许多相关的命名常量具有积分值时,使用枚举超过宏有多个优点。
a)枚举遵循范围规则。
b)枚举变量自动分配值。以下更简单
enum
state {Working, Failed, Freezed};
这样对比哪个更简单显而易见,有木有!
|