枚举类型的使用
2015-08-31 21:23
316 查看
枚举类型对学过编程的人而言可谓是既熟悉又陌生,各种语言的教材上都有对枚举类型的介绍,但是真正用过的人可能不多。
我也是因为工作之后才接触到枚举类型的使用,这时候才知道自己一直对枚举类型都是一知半解,今天通过查阅资料加深了对枚举类型的了解,现将其记录如下。
1.什么是枚举类型
我的理解是枚举类型就是对整型数据起一个别名,这个别名可以是各种字符,甚至汉字,但是不能是整数。一个大家都熟悉的例子:
这里就是把整型0取别名RED,1取别名BLUE,2取别名BLACK;
也许大家注意到了,为什么三个成员分别对应0,1,2呢?是巧合吗?
不是巧合,枚举类型默认从整数0开始,分别与花括号中的各成员对应,而且整数值依次加1。当然也可以指定各别名对应的整型值,如下:
此时,RED为1,BLUE为2,BLACK为3,WHITE为5,GREEN为6。需注意:
这种写法是错误的,因为枚举花括号中不能是数字。
2.为什么要使用枚举类型
使用枚举类型的目的是限制用户的输入为有限范围内的整数值,例如上面声明了COLOR的枚举,那么,当用户定义一个enum COLOR类型的变量时,该变量的值只能是花括号中的某一种颜色,给它赋值为其他都是错误的。这种特性很适合处理类似于状态机中的状态转换的情形,将所有的状态定义为一个枚举类型中的成员,并为其取合适的名字,会使得程序简单易懂,不易出错。
3.枚举类型的用法
我认为想要正确的使用枚举类型,必须要明确一点:枚举类型也是一种数据类型,也可以作为函数的返回值返回。举例说明如下:
同样可以使用typedef定义enum weekday类型为Weekday,然后用Weekday声明变量,如下:
#include <stdio.h>
#include <stdlib.h>
typedef enum weekday{
mon,
tue,
wen,
tur,
fri,
sat,
sun
}Weekday;
Weekday test_enum()
{
Weekday Today = mon;
return Today;
}
int main()
{
printf("%d\n",test_enum());
return 0;
}
输出结果为0,
我也是因为工作之后才接触到枚举类型的使用,这时候才知道自己一直对枚举类型都是一知半解,今天通过查阅资料加深了对枚举类型的了解,现将其记录如下。
1.什么是枚举类型
我的理解是枚举类型就是对整型数据起一个别名,这个别名可以是各种字符,甚至汉字,但是不能是整数。一个大家都熟悉的例子:
enum COLOR{RED,BLUE,BLACK};
这里就是把整型0取别名RED,1取别名BLUE,2取别名BLACK;
也许大家注意到了,为什么三个成员分别对应0,1,2呢?是巧合吗?
不是巧合,枚举类型默认从整数0开始,分别与花括号中的各成员对应,而且整数值依次加1。当然也可以指定各别名对应的整型值,如下:
enum COLOR{ RED = 1, BLUE, BLACK, WHITE = 5, GREEN };
此时,RED为1,BLUE为2,BLACK为3,WHITE为5,GREEN为6。需注意:
enum num{0,1,2,3,4};
这种写法是错误的,因为枚举花括号中不能是数字。
2.为什么要使用枚举类型
使用枚举类型的目的是限制用户的输入为有限范围内的整数值,例如上面声明了COLOR的枚举,那么,当用户定义一个enum COLOR类型的变量时,该变量的值只能是花括号中的某一种颜色,给它赋值为其他都是错误的。这种特性很适合处理类似于状态机中的状态转换的情形,将所有的状态定义为一个枚举类型中的成员,并为其取合适的名字,会使得程序简单易懂,不易出错。
3.枚举类型的用法
我认为想要正确的使用枚举类型,必须要明确一点:枚举类型也是一种数据类型,也可以作为函数的返回值返回。举例说明如下:
enum weekday{mon,tue,wed,thu,fri,sat,sun}; enum weekday Today = mon;
同样可以使用typedef定义enum weekday类型为Weekday,然后用Weekday声明变量,如下:
#include <stdio.h>
#include <stdlib.h>
typedef enum weekday{
mon,
tue,
wen,
tur,
fri,
sat,
sun
}Weekday;
Weekday test_enum()
{
Weekday Today = mon;
return Today;
}
int main()
{
printf("%d\n",test_enum());
return 0;
}
输出结果为0,
相关文章推荐
- where、having、group by、order by的顺序
- Hibernate自学详细笔记
- 百度面试题 最长公共子串-动态规划法
- Linux学习一:安装/配置vi,熟悉gcc/vi
- 我排第几个
- android传递数据方式2--通过剪切板传数据
- 间隔300ms第一次一个管亮流动一次,第二次两个管亮流动。依次到8个管亮,然后重复此过程
- poj 2226 Muddy Fields(最小点覆盖+巧妙构图)
- 今天又看到了一篇关于程序运行时内存方面的文章,特地来分享一下。
- asp.net如何解决传递中文参数乱码问题
- LeetCode之Best Time to Buy and Sell Stock
- HTML发展历史
- Spring学习笔记之三----基于Annotation的Spring IOC配置
- Hadoop系列之单机版安装
- Hive函数row_number实现
- 快速创建九宫格
- Building a RESTful Web Service
- win7双系统安装ubuntu并配置常用软件
- Java 调用cmd.exe命令
- xml文件解析并显示到Android手机 spinner的应用