C语言学习笔记---枚举类型enum

x33g5p2x  于2021-11-09 转载在 其他  
字(2.5k)|赞(0)|评价(0)|浏览(533)

枚举类型通常用来存放整形常量。可以使用enum关键字来创建一个"新的类型",用来表示一组关系比较密切的整形常量。

可以这样声明:

  1. enum spectrum { red,orange,yellow,green,blue,violet };
  2. enum spectrum color;

第一条语句声明创建了spectrum 作为标记名,允许把enum spectrum作为一个类型名使用。第二条语句声明了将 color作为该类型的变量。在第一条语句中依次列举了spectrum 变量可能有的值,因此color的值可能是red,orange,yellow,green,blue,violet这些等。比如要给color赋值时,可以这样操作:

color = green;

下面使用整形来打印这些枚举类型的值。

  1. printf("%d %d %d %d %d %d\r\n",red,orange,yellow,green,blue,violet);

打印结果如下:

  通过打印的结果可以发现,枚举类型的默认值都是从0开始的,如果不想使用默认的值,也可以直接给枚举类型赋值。

  1. enum spectrum { red = 10,orange,yellow,green,blue,violet };
  2. printf("%d %d %d %d %d %d\r\n",red,orange,yellow,green,blue,violet);

将第一个枚举常量的值修改为10,打印结果如下:

  这里只对第一个枚举常量赋值,但是后面的枚举常量的值会依次递增。继续修改代码如下:

  1. enum spectrum { red = 1,orange,yellow,green = 10,blue,violet };
  2. printf("%d %d %d %d %d %d\r\n",red,orange,yellow,green,blue,violet);

打印结果如下:

  通过打印结果可以发现,只要前面的枚举类型值发生了改变,那么后面紧跟着的枚举类型值就会自动加1。

通过使用枚举类型,可以提高程序的可读性和维护性。比如下面的代码:

  1. int main()
  2. {
  3. enum spectrum { red,orange,yellow,green,blue,violet };
  4. enum spectrum color;
  5. color = green;
  6. switch(color)
  7. {
  8. case red:
  9. puts("color is red!");
  10. break;
  11. case orange:
  12. puts("color is orange!");
  13. break;
  14. case yellow:
  15. puts("color is yellow!");
  16. break;
  17. case green:
  18. puts("color is green!");
  19. break;
  20. case blue:
  21. puts("color is blue!");
  22. break;
  23. case violet:
  24. puts("color is violet!");
  25. break;
  26. }
  27. system("pause");
  28. return 0;
  29. }

通过枚举类型来表示使用的各种颜色,这样在阅读代码的时候,通过名称就可以清晰的看出所使用的颜色,如果将枚举类型改成用整数0、1、2、3来表示的话,代码阅读起来就比较困难,必须借助于注释才能明白代码的具体含义。

当然也可以将枚举类型改成宏定义来实现,上面的代码可以修改如下:

  1. #define red 0
  2. #define orange 1
  3. #define yellow 2
  4. #define green 3
  5. #define blue 4
  6. #define violet 5
  7. int main()
  8. {
  9. int color;
  10. color = green;
  11. switch(color)
  12. {
  13. case red:
  14. puts("color is red!");
  15. break;
  16. case orange:
  17. puts("color is orange!");
  18. break;
  19. case yellow:
  20. puts("color is yellow!");
  21. break;
  22. case green:
  23. puts("color is green!");
  24. break;
  25. case blue:
  26. puts("color is blue!");
  27. break;
  28. case violet:
  29. puts("color is violet!");
  30. break;
  31. }
  32. system("pause");
  33. return 0;
  34. }

通过宏定义的方式也可以实现同样的功能,但是宏定义是代码看起来比较松散,而且定义的变量比较多,修改起来也比较麻烦。而且枚举变量还有一个优势就是可以进行自增或者自减运算。

  1. int main()
  2. {
  3. enum spectrum { red,orange,yellow,green,blue,violet };
  4. int color;
  5. for(color = red; color<=violet; color++)
  6. switch(color)
  7. {
  8. case red:
  9. puts("color is red!");
  10. break;
  11. case orange:
  12. puts("color is orange!");
  13. break;
  14. case yellow:
  15. puts("color is yellow!");
  16. break;
  17. case green:
  18. puts("color is green!");
  19. break;
  20. case blue:
  21. puts("color is blue!");
  22. break;
  23. case violet:
  24. puts("color is violet!");
  25. break;
  26. }
  27. system("pause");
  28. return 0;
  29. }

在循环中依次给color赋值,然后打印当前的颜色。接着color的值自增1,打印结果如下:

  通过自增或者自减的运算,使枚举类型应用起来更加灵活。

相关文章