枚举(一)
2015-06-06 19:50
309 查看
基础
基本概念和Java类似,也是使用enum关键字。如下<pre style="margin-top: 0px; margin-bottom: 0px;"><span style=" color:#808000;">enum</span><span style=" color:#c0c0c0;"> </span><span style=" color:#800080;">weekday</span>{
mon,tue,wed,thu=5,fri,sat,sun
};//注意这里要加分号
int main()
{
enum weekday a = wed;
enum weekday b = fri;
printf("%d %d\n",a,b);//输出的值分别是2,6
return -1;
}
在定义枚举中枚举常量的默认取值是该常量的前一个常量值+1,最前面的常量如果没有赋值那么它就是0。上面的wed是第三个,mon的值是0,所以它的值是2。thu被赋值为5,所以fri的值是6。
按上述方式定义完枚举后,再定义该枚举的枚举常量时每一次都需要写enum,很是麻烦。可以通过typedef关键字为枚举取一个新名字,如下
typedef enum weekday{ mon,tue,wed,thu=5,fri,sat,sun } Weekday;//为该枚举取一个新名字 int main() { Weekday b = sat;//使用枚举的新名字进行定义 if(b == sat){ printf("%s","yes"); }else{ printf("%d ",b); } return 0; }
也可以直接在声明枚举类型的时候定义枚举变量。如
<pre style="margin-top: 0px; margin-bottom: 0px;"><span style=" color:#808000;">enum</span><span style=" color:#c0c0c0;"> </span><span style=" color:#800080;">weekday</span>{
mon,tue,wed,thu=5,fri,sat,sun
} c;//注意这里要加分号
此时这个变量c的使用也是和上面一样。当然,这里也可以声明两个变量,只需要在c后面用逗号隔开即可。而且,按该种方式进行声明时也可以直接为枚举变量赋值。如为上面的c赋值,就可以直接在声明c的时候写成c=mon。
除了上述两种定义方式外,还可以省略枚举名(即省略上面的weekday),如
enum { mon,tue,wed,thu=5,fri,sat,sun } b;//相当于java的匿名内部类这样定义枚举时,只能使用已定义过的枚举变量b,而不能再使用它定义新的枚举变量。
枚举中的元素是常量,因此除了可以在定义时赋值外,在别的地方无法在给它赋值。并且,枚举常量的值必须是int类型的常量,如将上面的thu="aaa"便会报错:
error: enumerator value for 'thu' is not an integer constant由于枚举常量的值是int类型的,所以它可以用来比较,用在switch中等。
在程序中,会使用枚举常量为枚举类型的变量赋值,并且枚举常量是int类型的数个,但最好不要直接使用int类型的数字为枚举常量直接赋值。
在上面为枚举变量进行赋值时可以发现,直接是使用了枚举常量的名作为右值,而没有指定该名属性哪一个枚举。因此,为了不混淆,不同的枚举中不能存在同名的枚举常量。如枚举a中定义了名为a1的枚举常量,那么b中就不能定义名为a1的枚举常量了。
相关文章推荐
- 关于 Activity 中 must implement OnFragmentInteractionListener 的问题
- 老生常谈-01背包
- Hadoop1.2.1 HDFS原理
- 基于Bootstrap+jQuery.validate Form表单验证实践
- BloomFilter——大规模数据处理利器(爬虫判重)
- phantomjs的局限性
- BloomFilter——大规模数据处理利器(爬虫判重)
- ACM练习 反素数
- /bin/bash^M: bad interpreter: No such file or directory
- PAT复杂度_最大子列和问题、最大子列和变种
- delphi之完美Splash方案
- bzoj 3209 数位DP+欧拉定理
- VTR-to-Bitstream 1 General Recognition
- JSON-RPC轻量级远程调用协议介绍及使用
- ACDREAM 05B Circle vs Triangle(DFS专场)
- C++ 一些容易忽略的基本点
- Mac OS 安装cocoapods出现SSL connection错误
- MongoDB Windows环境安装及配置
- MongoDB Windows环境安装及配置
- Calendar 类