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



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

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. HDU 1892-See you(二维BIT)

    题意: 最多1000*1000的方格,各方格开始有一本书 有四种操作:对指定方格把书拿走或向里面放书,从一个方格那一定量的书放到另一个方格,查询给定对角线顶点的坐标的矩形范围内包含的书的总数 分析: ...

  2. IOS color 颜色值比较

    /生成采样对照颜色(黑色) UIColor* sampleColor = [UIColor colorWithRed:(0/255.0f) green:(0/255.0f)  blue:(0/255. ...

  3. 《Python核心编程》 第八章 条件和循环

    8–1.条件语句. 请看下边的代码 # statement A if x > 0: # statement B pass elif x < 0: # statement C pass el ...

  4. PHP $_SERVER的详细参数及说明

    $_SERVER['PHP_SELF']#当前正在执行脚本的文件名,与documentroot相关. $_SERVER['argv']#传递给该脚本的参数. $_SERVER['argc']#包含传递 ...

  5. DbHelper第三版, 数据库通吃

    using System;using System.Collections;using System.Data;using System.Data.Common;using System.Config ...

  6. I*k->AK

    将卷积转化为乘积: function A = GetA(I,m,n) %GetA get A which transforms P@k to A*k % I is the input imageP; ...

  7. CSS_网站配色参考方案

    http://www.cnblogs.com/QLeelulu/archive/2008/04/04/1136974.html   Shiny silver [#EEEEEE]       Reddi ...

  8. windows下安装和配置Weka

    Weka是一款免费的,非商业化的,基于java环境下的开源的机器学习以及数据挖掘软件.Weka里含有各种数据挖掘工具:数据预处理,分类与回归,聚类,关联规则和可视化工具. 一.安装weka 我们首先需 ...

  9. Can’t find file mysql/host.frm

    安装Mysql后报错: InnoDB: Apply batch completed 141115 15:04:36 InnoDB: Started; log sequence number 0 442 ...

  10. Phonegap学习点滴(2) -- 网络状态检测

    Phonegap学习点滴(2) -- 网络状态检测  http://blog.csdn.net/x251808026/article/details/16992943 方法一:在MainActivit ...