C语言中的enum(枚举)使用方法
近期在写数据结构的广义表时候用到了这个概念,在学习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(枚举)使用方法的更多相关文章
- C语言中的const,free使用方法具体解释
注意:C语言中的const和C++中的const是有区别的,并且在使用VS编译測试的时候. 假设是C的话.请一定要建立一个后缀为C的文件.不要是CPP的文件. 由于.两个编译器会有区别的. 一.C语言 ...
- C语言中malloc函数的使用方法
C语言中malloc是动态内存分配函数.函数原型:void *malloc(unsigned int num_bytes);参数:num_bytes 是无符号整型,用于表示分配的字节数.返回值:如果分 ...
- R语言中Fisher判别的使用方法
最近编写了Fisher判别的相关代码时,需要与已有软件比照结果以确定自己代码的正确性,于是找到了安装方便且免费的R.这里把R中进行Fisher判别的方法记录下来. 1. 判别分析与Fisher判别 不 ...
- Django模板语言中的Filters的使用方法
Filters可以称为过滤器.下面我们简单介绍是如何使用他的. Filters的语法: {{ value|filter_name:参数 }} Django大概提供了六十个内置过滤器,下面我们简单介绍几 ...
- Linux-C语言中gettimeofday()函数的使用方法(转载)
1.简介: 在C语言中可以使用函数gettimeofday()函数来得到时间.它的精度可以达到微妙 2.函数原型: #include<sys/time.h> int gettimeofda ...
- linux下C语言中的flock函数使用方法 .
表头文件 #include<sys/file.h> 定义函数 int flock(int fd,int operation); 函数说明 flock()会依參数operation所指 ...
- C语言中Union类型的使用方法
转自:http://blog.csdn.net/feimor/article/details/6858103 使用C语言时,常常使用struct,对于union类型却几乎没有用过,只知道它是联合类型, ...
- C语言中 fputs() fgets() 的使用方法
一.读字符串函数fgets函数的功能是从指定的文件中读一个字符串到字符数组中,函数调用的形式为: fgets(字符数组名,n,文件指针): 其中的n是一个正整数.表示从文件中读出的字符串不超过 n-1 ...
- Java 语言中 Enum 类型的使用介绍
Enum 类型的介绍 枚举类型(Enumerated Type) 很早就出现在编程语言中,它被用来将一组类似的值包含到一种类型当中.而这种枚举类型的名称则会被定义成独一无二的类型描述符,在这一点上和常 ...
随机推荐
- Qt Creator插件工作流程代码走读
Qt Creator有个很风骚的插件管理器PluginManager,还有个很骚包的插件说明PluginSpec.基本上,所有的Qt程序的入口都是传统的C程序一样,代码流程从main()函数开始. ...
- ios7下二维码功能的实现
苹果公司升级到IOS7后自己的PassBook自带二维码扫描功能,所以现在使用二维码功能不需要在借助第三方库了 使用前请先导入AVFoundation.frameWork // // YHQView ...
- Java学习之链表
数据结构学了,java实现下 package com.gh.Link; /** * 链表的实现 * @author ganhang * */ public class Links { public s ...
- 孙弘与Masa Maso 做互联网最贵的衬衫(2)_人物对话_中国时尚品牌网
孙弘与Masa Maso 做互联网最贵的衬衫(2)_人物对话_中国时尚品牌网 孙弘与Masa Maso 做互联网最贵的衬衫(2)
- Dining(最大流)
Dining Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 11844 Accepted: 5444 Descripti ...
- CoreAnimation —— CALayer
概述 如上篇博文讲述,UIView中封装了很多系统方法,可以满足我们的大部分需求.但是,其也有很多限制.那些方法产生的动画基本单元为UIView,是非常重量级的对象,而且也不支持三维布局,大部分是对视 ...
- stm32之595(spi芯片)
595是一款串转并的芯片: (三极管的功能) /*Include---------------------------*/ #include"stm32f10x_lib.h" / ...
- PHP缓存主要技术
1.普遍缓存技术: 数据缓存:这里所说的数据缓存是指数据库查询PHP缓存机制,每次访问页面的时候,都会先检测相应的缓存数据是否存在,如果不存在,就连接数据库,得到数据,并把查询结果序列化后保存到文件中 ...
- php 学习笔记 数组1
1.一般情况下$name['tom']和$name[tom]是相同的:但没有引号的键不能和常量区别开,如:define('index', 5)时:$name['tom']和$name[tom]不同 2 ...
- Qt中文件操作遇到的(变量,容器,结构体)
咳咳!总结了一下我在使用QT文件操作时所用到的,再接再厉!再接再厉!! 1.保存到文件: QFile file("test.txt"); if (!file.open(QIODev ...