c语言枚举类型的一些例子_第1页
c语言枚举类型的一些例子_第2页
c语言枚举类型的一些例子_第3页
c语言枚举类型的一些例子_第4页
c语言枚举类型的一些例子_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C语言枚举类型的一些例子注:以下全部代码的执行环境为VC+ 6.0宏和枚举的区别宏和枚举之间的差别主要在作用的时期和存储的形式不同,宏是在预 处理的阶段进行替换工作的,它替换代码段的文本,程序运行的过程中宏已不 存在了。而枚举是在程序运行之 b5E2RGbCAP而枚举除后才起作用的,枚举常量存储在数据段的静态存储区里。宏占用 代码段的空间,了占用空间,还消耗 CPU资源。plEanqFDPw但也不能就此说宏比枚举好,如果需要定义非常多的常量,用一条 enum .明显比一大堆define更清晰,枚举也可以用来定义一些特殊类型,比如 BOOl, DXDiTa9E3d如:type enum FALS

2、E,TRUE Bool;在程序中,可能需要为某些整数定义一个别名,我们可以利用预处理 指令#defi ne来完成这项工作,您的代码可能是:RTCrpUDGiTdefine MON 1 #defi ne TUE 2#defi ne WED 3#defi ne THU 4#defi ne FRI 5#defi ne SAT 6#defi ne SUN 7在此,我们定义一种新的数据类型,希望它能完成同样的工作。这种 新的数据类型叫枚举型。1. 定义一种新的数据类型-枚举型 以下代码定义了这种新的数据类型-枚举型en um DAYMON=1, TUE, WED, THU, FRI, SAT, SUN

3、;(1) 枚举型是一个集合,集合中的元素(枚举成员)是一些命名的整型 常量,元素之间用逗号,隔开。(2) DAY是一个标识符,可以看成这个集合的名字,是一个可选项,即 是可有可无的项。(3) 第一个枚举成员的默认值为整型的 0,后续枚举成员的值在前一个成 员上加1。(4) 可以人为设定枚举成员的值,从而自定义某个范围内的整数。(5) 枚举型是预处理指令 #define 的替代。(6) 类型定义以分号 ; 结束。2. 使用枚举类型对变量进行声明 新的数据类型定义完成后,它就可以使用了。我们已经见过最基本的 数据类型,如 :整型 int, 单精度浮点型 float, 双精度浮点型 double,

4、字符型 char, 短整型 short 等等。用这些基本数据类型声明变量通常是这样 : 5PCzVD7HxAchar a; / 变量 a 的类型均为字符型 charchar letter;int x,y,z; / 变量 x,y 和 z 的类型均为整型 intint number; double m, n;double result; / 变量 result 的类型为双精度浮点型 double 既然枚举也是一种数据类型,那么它和基本数据类型一样也可以对变 量进行声明。方法一 :枚举类型的定义和变量的声明分开enum DAYMON=1, TUE, WED, THU, FRI, SAT, SUN ;

5、enum DAY yesterday; enum DAY today;enum DAY tomorrow; / 变量 tomorrow 的类型为枚举型 enum DAY enum DAY good_day, bad_day; / 变量 good_day 和 bad_day 的类型均为枚 举型 enum DAYjLBHrnAILg方法二 :类型定义与变量声明同时进行 :enum /跟第一个定义不同的是,此处的标号DAY省略,这是允许的。saturday,sunday = 0,monday, tuesday, wednesday, thursday, friday workday; / 变量 wo

6、rkday 的类型为枚举型 enum DAY变量enum week Mon=1, Tue, Wed, Thu, Fri Sat, Sun days; /days 的类型为枚举型 enum xHAQX74J0Xweekenum BOOLEAN false, true end_flag, match_flag; / 定义枚举 类型并声明了两个枚举型变 LDAYtRyKfE量方法三:用 typedef 关键字将枚举类型定义成别名,并利用该别名进行 变量声明 :typedef enum workday saturday, sunday = 0, monday, tuesday, wednesday,

7、thursday, friday workday; / 此处的 workday 为枚举型 enum workday 的别名 workday today, tomorrow; / 变量 today 和 tomorrow 的类型为枚举型workday,也即 enum workdzzz6ZB2Ltkayenum workday 中的 workday 可以省略:typedef enumsaturday,sunday = 0,monday, tuesday, wednesday, thursday, friday workday; / 此处的workday为枚举型enum workday的别名workd

8、ay today, tomorrow; / 变量 today 和 tomorrow 的类型为枚举型 workday,也即 enum workddvzfvkwMiiay也可以用这种方式 :typedef enum workday saturday,sunday = 0,monday, tuesday, wednesday, thursday, friday;workday today, tomorrow; / 变量 today 和 tomorrow 的类型为枚举型 workday,也即 enum workdrqyni4ZNxiay注意: 同一个程序中不能定义同名的枚举类型,不同的枚举类型中也不

9、能存在同名的命名常量。错误示例如下所示 : 错误声明一 : 存在同名的枚举类型 typedef enum wednesday, thursday, friday workday;typedef enum WEEK saturday,sunday = 0,monday, workday;错误声明二 : 存在同名的枚举成员typedef enumwednesday, thursday, friday workday_1;typedef enum WEEK wednesday,sunday = 0,monday, workday_2;3. 使用枚举类型的变量3.1 对枚举型的变量赋值。实例将枚举类型

10、的赋值与基本数据类型的赋值进行了对比 :方法一 : 先声明变量,再对变量赋值#includeenum DAY MON=1, TUE, WED, THU, FRI, SAT, SUN ;void main()int x, y, z;x = 10;y = 20;z = 30;enum DAY yesterday, today, tomorrow;yesterday = MON;today = TUE;tomorrow = WED;printf(%d %d %d n, yesterday, today, tomorrow);方法二 :声明变量的同时赋初值#includeenum DAY MON=1,

11、 TUE, WED, THU, FRI, SAT, SUN ;void main()int x=10, y=20, z=30;enum DAY yesterday = MON,today = TUE,tomorrow = WED;printf(%d %d %d n, yesterday, today, tomorrow) ; EmxvxOtOco方法三 :定义类型的同时声明变量,然后对变量赋值。 include #enumDAY MON=1,TUE, WED,THU, FRI, SAT, SUN yesterday, today, tomorrow; SixE2yXPq5int x, y, z

12、;void main()x = 10; y = 20; z = 30; yesterday = MON; today = TUE; tomorrow = WED;printf(%d %d %d n, x, y, z); /输出:10 20 30printf(%d %d %d n, yesterday, today, tomorrow); / 6ewMyirQFL方法四 : 类型定义,变量声明,赋初值同时进行。 #includeenum DAYMON=1,TUE,WED,THU,FRI,SAT,SUNyesterday = MON, today = TUE, tomorrow = WED;int

13、 x = 10, y = 20, z = 30;void main()printf(%d %d %d n, x, y, z); /输出:10 20 30printf(%d %d %d n, yesterday, today, tomorrow); / kavU42VRUs3.2 对枚举型的变量赋整数值时,需要进行类型转换。 #includeenum DAY MON=1, TUE, WED, THU, FRI, SAT, SUN ; void main()enum DAY yesterday, today, tomorrow;yesterday = TUE;today = (enum DAY)

14、(yesterday + 1); /类型转换tomorrow = (enum DAY) 30; / 类型转换/tomorrow = 3; / 错误printf(%d %d %d n, yesterday, today, tomorrow); / y6v3ALoS893.3 使用枚举型变量#includeenum输出:1 2 3 输出:1 2 3 输出:2 3 30BELL = a,BACKSPACE = b,HTAB= t,RETURN = r,NEWLINE = n,VTAB = v,SPACE = ;enum BOOLEAN FALSE = 0, TRUE match_flag; void

15、 main()int index = 0;int count_of_letter = 0;int count_of_space = 0; char str = Im Ely efod; match_flag = FALSE;for(; strindex != 0; index+)if( SPACE != strindex ) count_of_letter+;elsematch_flag = (enum BOOLEAN) 1; count_of_space+;printf(%s %d times %c, match_flag ? match : not match, count_of_spac

16、e, NEWLINE); M2ub6vSTnPprintf(count of letters: %d %c%c, count_of_letter, NEWLINE, RETURN);0YujCfmUCw输出:match 2 timescount of letters: 10Press any key to continue4. 枚举类型与 sizeof 运算符#includeenum escapesBELL = a,BACKSPACE = b,HTAB = t,RETURN = r,NEWLINE = n,VTAB = v,SPACE = ;enum BOOLEAN FALSE = 0, TR

17、UE match_flag;void main()printf(%d bytes n, sizeof(enum escapes); /4 bytes printf(%d bytes n, sizeof(escapes); /4 bytes printf(%d bytes n, sizeof(enum BOOLEAN); /4 bytes printf(%d bytes n, sizeof(BOOLEAN); /4 bytes printf(%d bytes n, sizeof(match_flag); /4 bytes printf(%d bytes n, sizeof(SPACE); /4

18、bytes printf(%d bytes n, sizeof(NEWLINE); /4 bytes printf(%d bytes n, sizeof(FALSE); /4 bytes printf(%d bytes n, sizeof(0); /4 bytesJtypedef struct weekday_stenum week sun=123456789,mon,tue,wed,thu,fri,sat ; enum day monring, moon, aftermoon ; weekday_st;7EqZcWLZNXint main(int argc, char *argv)printf( sizeof(weekday_st)=%dn , sizeof(weekday_st); lzq7IGf02Eprintf( sizeof(weekday)=%dn , sizeof(weekday_st:week); zvpgeqJ1hkprintf( sizeof(day)=%dn , sizeof(weekday_st:day);return 0;eUts8ZQVRdsQsAEJkW5TGMsIasNXkATIrRGchYzgNrpoJac3v1sizeof(weekd

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论