c语言:23、Enum类型(枚举类型)

c语言:23、Enum类型(枚举类型)

若一种数据类型的取值只有少数的几种可能,且每种取值都有自己的含义,为了提高代码可读性,可以将他们定义为Enum类型,中文名为枚举。

enum colors {RED,GREEN,BLUE};

printf("%d\n", RED);//0
printf("%d\n", GREEN);//1
printf("%d\n", BLUE);//2

上例中,假设程序里面需要三种颜色,就可以用enum命令,把这三种颜色定义为一种枚举类型colors,它只有三种取值可能REDGREENBLUE。定义后这三个名字自动成为整数常量,编译器默认将它们的取值设为数字012。相比下RED要比0的可读性好多了。

注意,Enum 内部的常量名,遵守标识符的命名规范,但是通常都使用大写。

使用时,可以将变量声明为 Enum 类型。

enum colors color;

上面代码将变量color声明为enum colors类型。这个变量的值就是常量REDGREENBLUE之中的一个。

color = BLUE;
printf("%i\n", color);//2

上面代码将变量color的值设为BLUE,这里BLUE就是一个常量,值等于2
typedef命令可以为Enum类型起别名。

typedef enum {
    SHEEP,
    WHEAT,
    WOOD,
    BRICK,
    ORE
} RESOURCE;
RESOURCE r;

上面示例中,RESOURCE是Enum类型的别名。声明变量时,使用这个别名即可。

还有一种不常见的写法,就是声明Enum类型时,在同一行里面为变量赋值。

enum {
	SHEEP,
	WHEAT,
	WOOD,
	BRICK,
	ORE
} r = BRICK, s = WOOD;

上面示例中,r的值是3s的值是2

由于Enum的属性会自动声明为常量,所以有时候使用Enum的目的,不是为了自定义一种数据类型,而是为了声明一组常量。这时就可以使用下面这种写法,比较简单。

enum { ONE, TWO};
printf("%d  %d", ONE, TWO);// 0  1

上面示例中,enum是一个关键字,后面跟着一个代码块,常量就在代码块内声明,ONETWO就是两个Enum常量。

常量之间使用逗号分隔。最后一个常量后面的尾逗号,可以省略,也可以保留。

enum {ONE, TWO, };

由于Enum会自动编号,因此可以不必为常量赋值。C语言会自动从0开始递增,为常量赋值。但是C语言也允许为Enum常量指定值,不过只能指定为整数,不能是其他类型。因此,任何可以使用整数的场合,都可以使用Enum常量。

enum { ONE = 1, TWO = 2};
printf("%d %d", ONE, TWO); // 1  2

Enum常量可以是不连续的值。

enum { X = 2, Y = 18, Z = -2};

Enum常量也可以是同一个值。

enum {X = 2, Y = 2, Z = 2};

如果一组常量之中,有些指定了值,有些没有指定,那么没有指定值的常量会从上一个指定了值的常量,开始自动递增赋值。

enum {
	A, //0
	B, //1
	C = 4, //4
	D, //5
	E, //6
	F = 3, //3
	G, //4
	H //5
}

Enum的作用域与变量不同。如果是在顶层声明,那么在整个文件内都有效;如果是在代码块内部声明,则只对该代码块有效。如果与使用int声明的常量相比,Enum的好处是更清晰地表示代码意图。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值