假设一个变量你须要几种可能存在的值,那么就能够被定义成为枚举类型。之所以叫枚举就是说将变量或者叫对象可能存在的情况也能够说是可能的值一一例举出来。 



  举个样例来说明一吧,为了让大家更明确一点,比方一个铅笔盒中有一支笔,但在没有打开之前你并不知道它是什么笔,可能是铅笔也可能是钢笔,这里有两种可能,那么你就能够定义一个枚举类型来表示它!

enum box{pencil,pen};//这里你就定义了一个枚举类型的变量叫box,这个枚举变量内含有两个元素也称枚举元素在这里是pencil和pen,分别表示铅笔和钢笔。

  这里要说一下,假设你想定义两个具有相同特性枚举类型的变量那么你能够用例如以下的两种方式进行定义!

enum box{pencil,pen};  

  

enum box box2;//或者简写成box box2;

  再有一种就是在声明的时候同一时候定义。

enum {pencil,pen}box,box2; //在声明的同一时候进行定义!

  枚举变量中的枚举元素系统是依照常量来处理的,故叫枚举常量,他们是不能进行普通的算术赋值的,(pencil=1;)这种写发是错误的,可是你能够在声明的时候进行赋值操作!

enum box{pencil=1,pen=2};

可是这里要特别注意的一点是,假设你不进行元素赋值操作那么元素将会被系统自己主动从0開始自己主动递增的进行赋值操作,说到自己主动赋值,假设你仅仅定义了第一个那么系统将对下一个元素进行前一个元素的值加1操作,比如

enum box{pencil=3,pen};//这里pen就是4系统将自己主动进行pen=4的定义赋值操作!

  前面说了那么多,以下给出一个完整的样例大家能够通过以下的代码的学习进行更完整的学习!

#include <iostream>  

using namespace std;  

  

void main(void)  

{  

    enum egg {a,b,c};  

    enum egg test; //在这里你能够简写成egg test; 

  

     test = c; //对枚举变量test进行赋予元素操作,这里之所以叫赋元素操作不叫赋值操作就是为了让大家明确枚举变量是不能直接赋予算数值的,比如(test=1;)这种操作都是不被编译器所接受的,正确的方式是先进行强制类型转换比如(test = (enum
egg) 0;)! 

  

    if (test==c)  

     {  

        cout <<"枚举变量推断:test枚举相应的枚举元素是c" << endl;  

     }  

  

    if (test==2)  

     {  

        cout <<"枚举变量推断:test枚举元素的值是2" << endl;  

     }  

  

    cout << a << "|" << b << "|" << test <<endl;  

  

     test = (enum egg) 0; //强制类型转换 

    cout << "枚举变量test值改变为:" << test <<endl;  

    cin.get();  

}

  看到这里要最后说一个问题,就是枚举变量中的枚举元素(或者叫枚举常量)在特殊情况下是会被自己主动提升为算术类型的!

#include <iostream>  

using namespace std;  

  

void main(void)  

{  

    enum test {a,b};  

    int c=1+b; //自己主动提升为算术类型 

    cout << c <<endl;  

    cin.get();  

}

枚举类型 

在实际问题中,有些变量的取值被限定在一个有限的范围内。比如,一个星期内仅仅有七天,一年仅仅有十二个月,一个班每周有六门课程等等。假设把这些量 说明为整型,字符型或其他类型显然是不妥当的。为此,C语言提供了一种称为“枚举”的类型。在“枚举”类型的定义中列举出全部可能的取值,被说明为该“枚 举”类型的变量取值不能超过定义的范围。应该说明的是,枚举类型是一种基本数据类型,而不是一种构造类型,由于它不能再分解为不论什么基本类型。 

11.10.1 枚举类型的定义和枚举变量的说明 

1. 枚举的定义枚举类型定义的一般形式为: 

enum 枚举名{ 枚举值表 }; 

在枚举值表中应罗列出全部可用值。这些值也称为枚举元素。 

比如: 



该枚举名为weekday,枚举值共同拥有7个,即一周中的七天。凡被说明为weekday类型变量的取值仅仅能是七天中的某一天。 

2. 枚举变量的说明 

如同结构和联合一样,枚举变量也可用不同的方式说明,即先定义后说明,同一时候定义说明或直接说明。 

设有变量a,b,c被说明为上述的weekday,可採用下述任一种方式: 

enum weekday{ sun,mou,tue,wed,thu,fri,sat }; 

enum weekday a,b,c; 

或者为: 

enum weekday{ sun,mou,tue,wed,thu,fri,sat }a,b,c; 

或者为: 

enum { sun,mou,tue,wed,thu,fri,sat }a,b,c; 

11.10.2 枚举类型变量的赋值和使用 

枚举类型在使用中有下面规定: 

1. 枚举值是常量,不是变量。不能在程序中用赋值语句再对它赋值。 

比如对枚举weekday的元素再作下面赋值: 

sun=5; 

mon=2; 

sun=mon; 

都是错误的。 

2. 枚举元素本身由系统定义了一个表示序号的数值,从0開始顺序定义为0,1,2…。如在weekday中,sun值为0,mon值为1,…,sat值为6。 

【例11.10】 

main(){ 

enum weekday 

{ sun,mon,tue,wed,thu,fri,sat } a,b,c; 

a=sun; 

b=mon; 

c=tue; 

printf("%d,%d,%d",a,b,c); 





说明: 

仅仅能把枚举值赋予枚举变量,不能把元素的数值直接赋予枚举变量。如: 

a=sum; 

b=mon; 

是正确的。而: 

a=0; 

b=1; 

是错误的。如一定要把数值赋予枚举变量,则必须用强制类型转换。 

如: 

a=(enum weekday)2; 

其意义是将顺序号为2的枚举元素赋予枚举变量a,相当于: 

a=tue; 

还应该说明的是枚举元素不是字符常量也不是字符串常量,使用时不要加单、双引號。 

【例11.11】 

main(){ 

enum body 

{ a,b,c,d } month[31],j; 

int i; 

j=a; 

for(i=1;i<=30;i++){ 

month[i]=j; 

j++; 

if (j>d) j=a; 



for(i=1;i<=30;i++){ 

switch(month[i]) 



case a:printf(" %2d %c/t",i,'a'); break; 

case b:printf(" %2d %c/t",i,'b'); break; 

case c:printf(" %2d %c/t",i,'c'); break; 

case d:printf(" %2d %c/t",i,'d'); break; 

default:break; 





printf("/n"); 

}

enum 在c中的使用的更多相关文章

  1. 引用类中的enum

    引用类中的enum 引用类中的enum,需要加类的域class_name::value_in_enum_name 点击(此处)折叠或打开 #include <stdio.h> #inclu ...

  2. 正确的使用枚举(Enum)

    状态与选项的区别(states and options) 在用enum之前,我个人觉得,区分一下状态和选项的概念还是很必要的. 状态,同时只能有一种,如“OK”,“Error”,不可能同时是OK和Er ...

  3. sql点滴42—mysql中的数据结构

    原文:sql点滴42-mysql中的数据结构 MySQL 的数值数据类型可以大致划分为两个类别,一个是整数,另一个是浮点数或小数.许多不同的子类型对这些类别中的每一个都是可用的,每个子类型支持不同大小 ...

  4. C# 中枚举的一点研究(跳过一些net坑的研究而已)

    之前一直使用Enum.Parse()将字符串转为枚举,没有深究,后面发现一个问题后对下面的Enum有了一个初步研究(.net 4.0).看下面代码. (留意,枚举类型是值类型,其值不能为Null,所以 ...

  5. java开发中使用枚举表述数据字典

    一.用枚举表述数据字典 1.代码: package com.inspire.jdk.caculate; /** * Created by yaming * 用枚举表述常量数据字段 */ public ...

  6. ASP.NET MVC和Web API中的Angular2 - 第1部分

    下载源码 - 903.5 KB 内容 第1部分:Visual Studio 2017中的Angular2设置,基本CRUD应用程序,第三方模态弹出控件 第2部分:使用Angular2管道进行过滤/搜索 ...

  7. C++ Enum 转 Lua Table工具

    C++ Enum转Lua Table工具 观察C++ Enum结构 总结结构 enum GameMessage { //******* ///****************** GM_GAMESER ...

  8. 一览Swift中的常用关键字

    要学习Swift这门语言,就必须先了解Swift的关键字及对应的解释.这里就列一下在Swift中常用到的关键字. 关键字是类似于标识符的保留字符序列,除非用重音符号(`)将其括起来,否则不能用作标识符 ...

  9. Java 7 源码学习系列(二)——Enum

    Enum Enum类是java.lang包中一个类,他是Java语言中所有枚举类型的公共基类. 一.定义 public abstract class Enum<E extends Enum< ...

随机推荐

  1. C语言指针5分钟教程

    指针.引用和取值 什么是指针?什么是内存地址?什么叫做指针的取值?指针是一个存储计算机内存地址的变量.在这份教程里“引用”表示计算机内存地址.从指针指向的内 存读取数据称作指针的取值.指针可以指向某些 ...

  2. iOS 7 自定义Back按钮 与 Pop interactive gesture 问题

    1.自定义Back按钮 iOS中很多时候我们都会自定义返回按钮,也是一件easy的事,类似如下: // 返回按钮 1 - (void)showNavBackButton { UIButton *bac ...

  3. redis 和 bloom filter

    今天打算使用redis 的bitset搞一个 bloom filter, 这样的好处是可以节省内存,坏处是可能在会有一些数据因为提示重复而无法保存. bloom filter 的大体原理就是通过不同的 ...

  4. bjfu1109 最小公倍数和

    这题真是过了n年才a.最早是在2010年北大培训比赛上看到的这题,当时我不会,竹教主也不会,但他记下来了,研究一段时间后就会了,还把这题加到我校oj上.过了这么多年,我上网搜,关于这个问题的解题报告还 ...

  5. jQuery遍历Table tr td td中包含标签

    function shengchen() { var arrTR = $("#tbModule").children(); var Context=""; $( ...

  6. C 实现的算法篇

    算法的定义:算法是解决实际问题的一种精确的描述方法,目前,广泛认同的定义是:算法的模型分析的一组可行的确定的和有穷的规则 算法的五个特性:有穷性,确切性,输入,输出,可行性.目前算法的可执行的步骤非常 ...

  7. css3 javascript 实现菜单按钮特效

    一个菜单按钮特效案例,简单的实现了动态效果. 代码效果预览地址: http://code.w3ctech.com/detail/2504 <div class="bar" i ...

  8. springmvc里面的中文乱码问题

    如果是以get方法提交的表单,则可以在comcat服务器的server.xml文件里面设置 <Connector connectionTimeout="20000" port ...

  9. Backbone.js developer 武汉 年薪8w-10w

    1.   精通Backbone.js 2.   熟练Ajax.NoSQL.RESTful APIs 3.   了解Pusher.com和 Parse.com 4.   具有良好的沟通能力,学习能力,敬 ...

  10. vim对erlang语法支持

    发现vim写erlang代码语法缩进都不对,后来发现vim是7.0的,vim7.3开始才对erlang这块进行了支持,所以升级vim git上下载源码包,然后一系列配置安装 http://www.2c ...