近期在写数据结构的广义表时候用到了这个概念,在学习C语言的时候没有太注意们这里学一下。

我在网上结合了非常多资料,这里自己总结一下。

首先说。JAVA和C++中都有枚举类型。

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

比如:

一个铅笔盒中有一支笔,但在没有打开之前你并不知道它是什么笔,可能是铅笔也可能是钢笔。

这里有两种可能,那么你就能够定义一个枚举类型来表示它!

enum box{pencil,pen};

这个枚举变量内含有两个元素也称枚举元素在这里是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的定义赋值操作。

样例:

//枚举类型C语言
//杨鑫
#include <stdio.h>
#include <stdlib.h>
int main()
{
enum egg{a, b, c};
enum egg test;
test = a; //对枚举变量test进行赋予元素操作,假设不赋值的话,默认是最后一个元素
switch(test)
{
case a:
printf("test的值是a\n");
break;
case b:
printf("test的值是b\n");
break;
case c:
printf("test的值是c\n");
break;
}
return 0; }

C++实现:

#include <iostream>
using namespace std; int main()
{
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();
return 0;
 }   
看到这里要最后说一个问题,就是枚举变量中的枚举元素(或者叫枚举常量)在特殊情况下是会被自己主动提升为算术类型的!

枚举类型
在实际问题中。有些变量的取值被限定在一个有限的范围内。比如,一个星期内仅仅有七天,一年仅仅有十二个月,
一个班每周有六门课程等等。 假设把这些量 说明为整型,字符型或其他类型显然是不妥当的。为此。C语言提供了一种称为“枚举”的类型。
在“枚举”类型的定义中列举出全部可能的取值,被说明为该“枚 举”类型的变量取值不能超过定义的范围。
应该说明的是,枚举类型是一种基本数据类型,而不是一种构造类型。由于它不能再分解为不论什么基本类型。 枚举类型的定义和枚举变量的说明
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。 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;
还应该说明的是枚举元素不是字符常量也不是字符串常量,使用时不要加单、双引號。 main(){
enum body
{ a,b,c,d } month[31],j;
int i;
j=a;
for(i=1;i<=30;i++){
month[i]=j;
<span><span>j = (</span><span class="keyword">enum</span><span> body) (j + 1);  </span></span>
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");
}

C语言中的enum(枚举)使用方法的更多相关文章

  1. C语言中的const,free使用方法具体解释

    注意:C语言中的const和C++中的const是有区别的,并且在使用VS编译測试的时候. 假设是C的话.请一定要建立一个后缀为C的文件.不要是CPP的文件. 由于.两个编译器会有区别的. 一.C语言 ...

  2. C语言中malloc函数的使用方法

    C语言中malloc是动态内存分配函数.函数原型:void *malloc(unsigned int num_bytes);参数:num_bytes 是无符号整型,用于表示分配的字节数.返回值:如果分 ...

  3. R语言中Fisher判别的使用方法

    最近编写了Fisher判别的相关代码时,需要与已有软件比照结果以确定自己代码的正确性,于是找到了安装方便且免费的R.这里把R中进行Fisher判别的方法记录下来. 1. 判别分析与Fisher判别 不 ...

  4. Django模板语言中的Filters的使用方法

    Filters可以称为过滤器.下面我们简单介绍是如何使用他的. Filters的语法: {{ value|filter_name:参数 }} Django大概提供了六十个内置过滤器,下面我们简单介绍几 ...

  5. Linux-C语言中gettimeofday()函数的使用方法(转载)

    1.简介: 在C语言中可以使用函数gettimeofday()函数来得到时间.它的精度可以达到微妙 2.函数原型: #include<sys/time.h> int gettimeofda ...

  6. linux下C语言中的flock函数使用方法 .

    表头文件  #include<sys/file.h> 定义函数  int flock(int fd,int operation); 函数说明  flock()会依參数operation所指 ...

  7. C语言中Union类型的使用方法

    转自:http://blog.csdn.net/feimor/article/details/6858103 使用C语言时,常常使用struct,对于union类型却几乎没有用过,只知道它是联合类型, ...

  8. C语言中 fputs() fgets() 的使用方法

    一.读字符串函数fgets函数的功能是从指定的文件中读一个字符串到字符数组中,函数调用的形式为: fgets(字符数组名,n,文件指针): 其中的n是一个正整数.表示从文件中读出的字符串不超过 n-1 ...

  9. Java 语言中 Enum 类型的使用介绍

    Enum 类型的介绍 枚举类型(Enumerated Type) 很早就出现在编程语言中,它被用来将一组类似的值包含到一种类型当中.而这种枚举类型的名称则会被定义成独一无二的类型描述符,在这一点上和常 ...

随机推荐

  1. spring bean管理 笔记1

    轻量级,无侵入 Bean管理 1 创建applicationContext.xml 2 配置被管理的Bean 3 获取Bean pom.xml配置 <dependency> <gro ...

  2. cygwin中vim的使用方法

    vim类似Windows中的记事本,功能非常强大. vim的使用技巧 1.vim text.txt text存在则打开,不存在则类似新建一个叫text的txt文件 2.退出 按esc切换到命令模式,然 ...

  3. 从数据库中,绑定JQuery Accordion控件---Repeater control

    http://aspsnippets.com/Articles/jQuery-Accordion-example-in-ASPNet-using-C-and-VBNet.aspx 1. 添加JQuer ...

  4. E - Fibonacci Again(找规律)

    逐渐发现找规律的美妙之处啦,真不错,用普通方法解决很久或者很麻烦的问题,找到规律就很方便,算法最主要还是思想 Description There are another kind of Fibonac ...

  5. c++隐藏实例

    隐藏:是指派生类的函数屏蔽了与其同名的基类函数,规则如下:(1)如果派生类的函数与基类的函数同名,但是参数不同.此时,不论有无virtual关键字,基类的函数将被隐藏(注意别与重载混淆). 很简单略去 ...

  6. 10个值得我们关注的python博客

    大家好,还记得我当时学习python的时候,我一直努力地寻找关于python的博客,但我发现它们的数量很少.这也是我建立这个博客的原因,向大家分享我自己学到的新知识.今天我向大家推荐10个值得我们关注 ...

  7. WPF中StringFormat 格式化 的用法

    原文 WPF中StringFormat 格式化 的用法 网格用法 <my:DataGridTextColumn x:Name="PerformedDate" Header=& ...

  8. Hdu 1158 Employment Planning(DP)

    Problem地址:http://acm.hdu.edu.cn/showproblem.php?pid=1158 一道dp题,或许是我对dp的理解的还不够,看了题解才做出来,要加油了. 只能先上代码了 ...

  9. JDK1.6官方下载

    JDK1.6官方下载_JDK6官方下载地址:http://www.java.net/download/jdk6/6u10/promoted/b32/binaries/jdk-6u10-rc2-bin- ...

  10. Effective C++ Item 40 明智而审慎地使用多重继承

    本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie 经验:多重继承比单一继承复杂.它可能导致新的歧义性,以及对 virtual 继承的须要 演示 ...