enum 在c中的使用
假设一个变量你须要几种可能存在的值,那么就能够被定义成为枚举类型。之所以叫枚举就是说将变量或者叫对象可能存在的情况也能够说是可能的值一一例举出来。
举个样例来说明一吧,为了让大家更明确一点,比方一个铅笔盒中有一支笔,但在没有打开之前你并不知道它是什么笔,可能是铅笔也可能是钢笔,这里有两种可能,那么你就能够定义一个枚举类型来表示它!
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中的使用相关推荐
- android enum 内存,Android 中的 Enum 到底占多少内存?该如何用?
听说过一些论调,Enum 不该用啊,占用了很大的 dex 文件,占用很多内存.而到底确切占用了多少内存,没说.本文分析了枚举所占用的精确的内存大小,方便大家权衡选择,希望对大家有帮助. 关于 Enum ...
- java 枚举类型enum ppt,java中的枚举类型——Enum
日常java编程中,常见用一些静态常量表示一些状态码,特殊含义的标志等,例如: 1 2 3 4 5public class A{ public static final int STATUS_SUCC ...
- mysql 枚举 enum用法_mysql中的枚举类型ENUM的用法:
mysql中的枚举类型ENUM的用法: (2010-06-18 13:44:13) mysql中的枚举类型ENUM的用法: mysql中的枚举类型ENUM是一个字符串对象,它的值是自表创建时在列规定中 ...
- mysql枚举类型enum用法_mysql中枚举类型之enum详解
enum类型就是我们常说的枚举类型,它的取值范围需要在创建表时通过枚举方式(一个个的列出来)显式指定,对1至255个成员的枚举需要1个字节存储: 对于255至65535个成员,需要2个字节存储.最多允 ...
- enum ordinal java_Java中怎样由枚举常量的ordinal值获得枚举常量对象
Python3使用urllib访问网页 介绍 改教程翻译自python官网的一篇文档. urllib.request是一个用于访问URL(统一资源定位符)的Python模块.它以urlopen函数的形 ...
- 关于Swift中Struct,Class和Enum的哪些事儿
前言 Swift type System Swift是强类型的,尽管只有六种类型. 命名类型: protocol, class , struct , enum 复合类型:tuple, function ...
- 面试题解析:1 Java中switch语句可以作用在enum上的测试
enum是java中的枚举,其实枚举是一个常量,枚举就是定义枚举类的一个实例. 定义枚举的时候,应该注意一下几个问题: 其构造方法应该是private 的,为什么呢?根据我的理解,应为枚举是个常量,枚 ...
- C# Idioms: Enum还是Enum Class(枚举类)
原文排版格式:http://www.marshine.com) reversion:2004/5/28 修改说明:感谢Ninputer提到的CLS兼容问题,同时修改了原来版本没有提及的Equals改写 ...
- 状态模式在领域驱动设计中的使用
领域驱动设计是软件开发的一种方式,问题复杂的地方通过将具体实现和一个不断改进的核心业务概念的模型连接解决.这个概念是Eric Evans提出的,http://www.domaindrivendesig ...
- java 枚举 或运算_Objective-C 枚举 中位运算 的使用
前言 Enum,也就是枚举,从C语言开始就有了,C++.Java.Objective-C.Swift这些语言,当然都有对应的枚举类型,功能可能有多有少,但是最核心的还是一个--规范的定义代码中的状态. ...
最新文章
- iOS消息推送机制原理与实现
- Zabbix如何实现Server和Agent的通信加密
- 程序员十大心愿,程序员:你这么了解我的心声的嘛!
- 工业机器人打磨抛光编程员工资_让我们一起来谈谈,工业机器人行业的真实工资是多少?...
- spring学习(50):延迟加载
- 学python用什么软件-零基础初学python需要安装哪些软件?希望对你们有帮助
- oracle 10g dg参数配置,Windows平台之Oracle10g DG配置
- xmind 拖拽_XMind 2020
- KVM虚拟化技术浅析
- Git报错remote: error: hook declined to update refs/heads/feature/XXX
- XMU 1612 刘备闯三国之桃园结义 【二分】
- android发短信!渣本毕业两年经验,终局之战
- 计算机电脑主板电池,电脑主板电池怎么放电_主板电池放电要多久_电脑主板电池为啥要放电...
- linux上创建loopback接口,在python中的特定接口的linux loopback接口
- Matlab模拟分子的布朗运动
- 利用普普通通的游戏引擎实现普普通通的电梯调度算法
- Linux-Shell脚本练习
- 谷歌浏览器将ssd盘上的缓存目录迁移至机械硬盘
- IAR修改工程名流程
- 【转】PHP PDO 学习笔记