枚举是 C 语言中的一种基本数据类型,它可以让数据更简洁,更易读。
1 2 3 4 5 6 7 8 9 10 11 12 13 | enum colors { red,blue,yellow }clo; int main(void) { clo=red; printf("%d\n",clo); //0 clo=yellow; printf("%d\n",clo); //2 return 0; } |
第一个枚举成员的默认值为整型的 0,后续枚举成员的值在前一个成员上加 1。我们在这个实例中把第一个枚举成员的值定义为 1,第二个就为 2
1 2 3 4 | enum DAY { MON, TUE=3, WED, THU }; |
没有指定值的枚举元素,其值为前一元素加 1。也就说 MON 的值为 0,TUE的值为 3,WED 的值为 4,THU 的值为 5
如何遍历枚举类型?
在C 语言中,枚举类型是被当做 int 或者 unsigned int 类型来处理的,所以按照 C 语言规范是没有办法遍历枚举类型的。
如果想要遍历枚举类型,枚举类型必须连续是可以实现有条件的遍历。
1 2 3 4 5 6 7 8 9 10 11 12 13 | #include <stdio.h> enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN } day; int main(void) { // 遍历枚举元素 for (day = MON; day <= SUN; day++) { printf("枚举元素:%d \n", day); } } |
结合switch使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | enum colors { red,blue,yellow }; int main(void) { enum colors clo; scanf("%d",&clo); switch(clo) { case red: printf("你喜欢红色\n"); break; case blue: printf("你喜欢蓝色\n"); break; case yellow: printf("你喜欢黄色\n"); break; default: printf("没有你喜欢的颜色\n"); } return 0; } |
占用内存:
引自添加链接描述
枚举类型,指一个被命名的整型常数的集合。即枚举类型,本质上是一组常数的集合体,只是这些常数有各自的命名。枚举类型,是一种用户自定义数据类型。
枚举变量,由枚举类型定义的变量。枚举变量的大小,即枚举类型所占内存的大小。由于枚举变量的赋值,一次只能存放枚举结构中的某个常数。所以枚举变量的大小,实质是常数所占内存空间的大小(常数为int类型,当前主流的编译器中一般是32位机器和64位机器中int型都是4个字节),枚举类型所占内存大小也是这样。
另外,可以用编译器内置的指示符sizeof,计算出枚举变量(或枚举类型)的大小进行验证。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 例子: int main() { enum number { one = 1, two = 2, three = 3, foure = 4, }; enum number num1; printf("int sizeof:%d\n",sizeof(int));//int类型占用几个字节; printf("enum number sizeof:%d\n",sizeof(enum number));//枚举结构enum number占用几个字节; printf(" variable num1 sizeof:%d\n",sizeof(num1));//定义后的枚举变量占用几个字节; num1 = three; printf("after 'num1 = three' ,variable num1 sizeof:%d\n",sizeof(num1));//赋值后的枚举变量占用几个字节; } |

来一道题:计算一个类对象所占内存空间大小
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | class A { int i; union U { char buff[13]; int j; }u; void foo(){}; typedef char* (*f) (void*); enum {red,blue,pink} color; }; int main(void) { A a; printf("%d\n",sizeof(a)); return 0; } |
简单分析:
- 整形i占4个字节
- 联合体U,最大数据类型占4个字节,最大成员所占字节13个,内存对齐4的倍数为16.
- 函数foo()不占空间
- char* 类型没有定义变量不占空间
- enum占用4个字节
所以占用24个字节