enum枚举
enum枚举
枚举就我自身来说很少用到,全都交给#define解决了,但最近似乎遇见的越来越多,索性就看一看是何方妖孽!(有时候,很奇怪,以前从未注意的问题会在某一天突然成批的出现在你眼前,勾起你的好奇)
enum是C语言中的一个关键字,enum叫枚举数据类型,枚举数据类型描述的是一组整型值的集合(这句话其实不太妥当),枚举型是预处理指令#define的替代,枚举和宏其实非常类似,宏在预处理阶段将名字替换成对应的值,枚举在编译阶段将名字替换成对应的值,
enum number{ one=1, two=2, three=3,} ; enum data {four=4,five=6,six=6,};
枚举的正常使用
#include <stdio.h> #include <stdlib.h> int main() { enum color { red = 1, green=4, blue=6 }; /* 枚举一般直接可以使用不用中间变量 */ // enum color favorite_color; int favorite_color; /* ask user to choose color */ printf("请输入你喜欢的颜色: (1. red, 4. green, 6. blue: "); scanf_s("%d", &favorite_color); /* 输出结果 */ switch (favorite_color) { case red: printf("你喜欢的颜色是红色"); break; case green: printf("你喜欢的颜色是绿色"); break; case blue: printf("你喜欢的颜色是蓝色"); break; default: printf("你没有选择你喜欢的颜色"); } return 0;
枚举可以赋值
#include <stdio.h> enum number{ one=1, two=2, three=3,}; int main() { enum number one = (enum number)10; printf("%d\n", one); printf("%d\n", two); printf("%d\n", three); return 0; }
赋值时一定要注意类型转换(enum number)
枚举可以直接使用枚举的变量(与#define相似)
枚举无法遍历
当枚举成员变量按顺序+1时可以使用遍历
#include <stdio.h> enum number{ one=1, two=2, three=3,}; int main() { int num = 0; for (num = one; num <= 3; num++) { printf("%d\n", num); } return 0; }
当枚举变量为任意数时绝对不能使用
#include <stdio.h> enum number{ one=4, two=15, three=26,}; e int main() { int num = 0; for (num = one; num <= three; num++) { printf("%d\n", num); }return 0; }
运行结果

那把three给改成3呢?

所以用枚举就别想遍历了 !!!
枚举的大小
一个枚举常量的占的字节数为4个字节,恰好和int类型的变量占的字节数相同,假设把这些枚举常量说明为整型,字符型或其他类型显然是不妥当的,因为枚举类型是一种基本数据类型,而不是一种构造类型,它不能再分解为什么基本类型
注意
在C语言体系里不能存在两个枚举类型里含有名字一样的变量,编译器无法区别。
//这是错误的 enum number { one = 4, two = 15, three = 26, }; enum data { one =4, two =6, three =6,}; // 当然放在局域没问题 void N() { enum number { one = 4, two = 15, three = 26, }; printf("%d",one); } void B() { enum data { one =4, two =6, three =6,}; printf("%d",one); }
但C++,java可以通过构建class绕开障碍

浙公网安备 33010602011771号