C语言中的枚举

枚举


用于声明一组常数。当一个变量有几个固定的可能取值时,可以将这个变量定义为枚举类型

类型定义


enum Season {Spring, Summer, Autumn, Winter};

定义变量


与结构体一样,有三种方式:

1
2
enum Season {Spring, Summer, Autumn, Winter};
enum Season s;
1
enum Season {Spring, Summer, Autumn, Winter} s;
1
enum {Spring, Summer, Autumn, Winter} s;

枚举常量的意义


C语言编译器会将枚举元素(Spring、Summer等)作为整型常量处理,称为枚举常量。

  • 枚举常量默认值

枚举元素的值取决于定义时各枚举元素排列的先后顺序。默认情况下,第一个枚举元素的值为0,第二个为1,依次顺序加1。

enum Season {Spring, Summer, Autumn, Winter};

也就是说Spring的值为0,Summer的值为1,Autumn的值为2,Winter的值为3

  • 改变枚举常量的值

enum Season {Spring, Summer = 3, Autumn, Winter};

没有指定值的枚举元素,其值为前一元素加1。也就说Spring的值为0,Summer的值为3,Autumn的值为4,Winter的值为5

使用方式


1
2
3
4
5
6
enum Season {
Spring, Summer =18, Autumn, Winter
} season;
season = 9; //可以对变量赋值成其它整型常量值
season = Spring; //赋值成 枚举常量值

遍历

  • 普通方式
1
2
3
for (int i = Spring; i<= Winter; ++i) {
printf("枚举元素:%d \n", i);
}

如果改变了中间的枚举常量值,那么在 遍历的时候,也无法 遍历出正确的元素值。

所以不要随意改变枚举常量的值,当然仅在声明时改变首元素的值,对遍历还是无影响的。

  • 指针方式(有问题)
1
2
3
4
enum Season *s = &season;
for (int i = 0; i <=4; i++) {
printf("枚举sea2元素:%d \n", *(s+i)); //跟数组不一样,不是连贯存储的,所以用指针遍历无效
}
------ 本文结束 ------

版权声明
协议:No Fuck License

stone 创作并维护
本文首发于 stone世界 博客( http://stone86.top
版权所有,侵权必究。如要转载,请声明出处

Fork me on GitHub