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



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

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. Azure终于支持大容量虚拟机了-最高32核,448G内存

    Azure终于支持大容量虚拟机了-最高32核,448G内存 最近微软Azure虚拟机旗下的大容量G系列虚拟机通用版本正式上线.G系列虚拟机方案提供公有云领域最大的内存容量.最强处理能力以及空间可观的本 ...

  2. Tkinter教程之Frame篇

    本文转载自:http://blog.csdn.net/jcodeer/article/details/1811339 '''Tkinter教程之Frame篇'''#Frame就是屏幕上的一块矩形区域, ...

  3. 一个谷粉和3年的Google Reader重度使用者的碎碎念

    2013-03-14 上午看到Andy Rubin辞去Android业务主管职务.由Chrome及应用高级副总裁继任的新闻,还在想这会给Android带来什么,中午刷微博的时候就挨了当头一棒:Goog ...

  4. Memory Cache(内存缓存)

    当Google测试了Google Search服务的可用性后,发现速度是最影响Web应用的可用性的因素之一.相对于作用相同但是速度慢的应用,用户更喜欢速度快的应用.多来年,Google已经掌握了如何使 ...

  5. HDU-3864 D_num Miller_Rabin和Pollard_rho

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3864 题意:给定一个数n,求n的因子只有四个的情况. Miller_Rabin和Pollard_rho ...

  6. AS3 条件编译

    转:http://www.lite3.cn/blog/?p=404&cpage=1 知道C/C++ 有条件编译,一直想着AS要是也有条件编译就好了,今天搜了半天Google,终于让我找到了 下 ...

  7. 如何在不装ORACLE的情况下使用PLSQL

    原来我电脑装了oracle跟plsql,然后使用plsql的.后来因为某些原因,我重装了系统,把装的软件都格调了,需要重新装.当时在装plsql的时候我就想,我一直都是直接用plsql远程连接的服务器 ...

  8. 应用反射写的tostring方法

    应用反射写的tostring方法 应用反射写的tostring方法,方便以后查询 代码 package com.chzhao.reflecttest; import java.lang.reflect ...

  9. jquery easyui鼠标右击显示自定义的菜单

    1.datagrid表格中,对某一行鼠标右击,显示出如下的自定义的菜单: 在html页面中写: <div id="menu" class="easyui-menu& ...

  10. Linux中监控命令top命令使用方法详解

    收集了两篇关于介绍Linux中监控命令top命令的详细使用方法的文章.总的来说,top命令主要用来查看Linux系统的各个进程和系统资源占用情况,在监控Linux系统性能方面top显得非常有用,下面就 ...