枚举是 C 语言中的一种基本数据类型,它可以让数据更简洁,更易读。
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
enum DAY
{
MON, TUE=3, WED, THU
};
没有指定值的枚举元素,其值为前一元素加 1。也就说 MON 的值为 0,TUE的值为 3,WED 的值为 4,THU 的值为 5
如何遍历枚举类型?
在C 语言中,枚举类型是被当做 int 或者 unsigned int 类型来处理的,所以按照 C 语言规范是没有办法遍历枚举类型的。
如果想要遍历枚举类型,枚举类型必须连续是可以实现有条件的遍历。
#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使用
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,计算出枚举变量(或枚举类型)的大小进行验证。
例子:
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));//赋值后的枚举变量占用几个字节;
}
来一道题:计算一个类对象所占内存空间大小
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个字节