(自定义类型)枚举

什么是枚举

枚举顾名思义就是一一列举。
把可能的取值一一列举。
比如我们现实生活中:

一周的星期一到星期日是有限的7天,可以一一列举性
性别有:男、女、保密,也可以一一列举
月份有12个月,也可以一一列举
三原色,也是可以意义列举

enum Day//星期
{
	Mon,
	Tues,
	Wed,
	Thur,
	Fri,
	Sat,
	Sun
};
enum Sex//性别
{
	MALE,
	FEMALE,
	SECRET
};
enum Color//颜⾊
{
	RED,
	GREEN,
	BLUE
};

以上定义的enum Dayenum Sexenum Color 都是枚举类型。
{}中的内容是枚举类型的可能取值,也叫枚举常量
这些可能取值都是有值的,默认从0开始,依次递增1,当然在声明枚举类型的时候也可以赋初值。

enum Color//颜⾊
{
	RED = 3,
	GREEN,
	BLUE,
	YELLOW = 9,
	BLACK
};

上述代码中,GREEN是4,BLUE是5,BLACK是10,没有赋初值的都是根据前面赋初值的默认递增1。

枚举类型的定义

前面我们只是声明了枚举类型,我们可以通过以下三种方式来定义枚举变量。
1、先定义枚举类型,再定义枚举变量

enum DAY
{
      MON=1, TUE, WED, THU, FRI, SAT, SUN
};
enum DAY day;

2、定义枚举类型的同时定义枚举变量

enum DAY
{
      MON=1, TUE, WED, THU, FRI, SAT, SUN
} day;

3、省略枚举名称,直接定义枚举变量

enum
{
      MON=1, TUE, WED, THU, FRI, SAT, SUN
} day;

看一个实例:

#include <stdio.h>

enum DAY
{
      MON=1, TUE, WED, THU, FRI, SAT, SUN
};
 
int main()
{
    enum DAY day = WED;
    printf("%d",day);//3
    return 0;
}

输出结果为3

枚举类型的使用

#include <stdio.h>
#include <stdlib.h>
int main()
{
   enum color { red = 1, green, blue };
   int favorite_color;
    /* 用户输入数字来选择颜色 */
    printf("请输入你喜欢的颜色: (1. red, 2. green, 3. blue): ");
    scanf("%u", &favorite_color);
    /* 输出结果 */
    switch (favorite_color)
    {
        case red:
            printf("你喜欢的颜色是红色");
            break;
        case green:
            printf("你喜欢的颜色是绿色");
            break;
        case blue:
            printf("你喜欢的颜色是蓝色");
            break;
        default:
            printf("你没有选择你喜欢的颜色");
    }
    return 0;
}

上述代码中我们也可以将case 后的blue等枚举成员换成1,2,3,4,但是这样就降低了代码的易读性。这就是枚举类型的好处。

枚举注意事项

1.枚举类型是按照整型变量来处理的。枚举类型的大小是4。

enum day {
	MONDAY,
	TUESDAY
};
int main()
{
	enum day d;
	printf("%zd\n", sizeof(d));//输出结果是4
	return 0;
}

2.我们可以给枚举变量赋值,但是不能改变枚举成员的值。
在这里插入图片描述
上面MON = 2是错误的写法,但是enum DAY day = -1是正确的。但其实第二种写法也就在C语言中可以通过,因为C语言的语法检查没有那么严格。严谨的应该是给枚举变量赋值一个枚举类型的值。

3.我们可以给定义的变量赋值枚举成员,那么他的值就是枚举成员的值

enum day {
	MONDAY,
	TUESDAY
};
int main()
{
	int i = TUESDAY;
	printf("%d\n", i);//输出结果是1
	return 0;
}

4.不能定义的变量直接赋值给枚举类型(第二条不严谨)
在这里插入图片描述
当我们把文件切换为C++的时候就会发现我们给枚举变量赋初值的时候全都报错了。因为不能直接将非枚举类型的值直接赋值给枚举类型。如果要赋值就要强转或者赋值枚举类型的值。 比如enum DAY d = MONDAY

int main()
{
    enum day
    {
        saturday,
        sunday,
    };

    int a = 1;
    enum day weekend;
    weekend = ( enum day ) a;  //类型转换
    //weekend = a; //错误
    printf("weekend:%d",weekend);
    return 0;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值