C语言学习之:enum枚举

枚举是 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个字节

猜你喜欢

转载自blog.csdn.net/Yang_1998/article/details/106482044
今日推荐