C++程序设计第4章结构体、枚举类型_第1页
C++程序设计第4章结构体、枚举类型_第2页
C++程序设计第4章结构体、枚举类型_第3页
C++程序设计第4章结构体、枚举类型_第4页
C++程序设计第4章结构体、枚举类型_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

1、C+C+ 第第4 4章章(4)(4) 结构体、枚举类型结构体、枚举类型 1C+程序设计第4章结构体、枚举类型 2 主要内容主要内容 l 结构体类型的定义结构体类型的定义 l 结构体变量的定义结构体变量的定义 l 结构体变量的使用结构体变量的使用 l 结构体数组结构体数组 l 结构体中的静态成员结构体中的静态成员 l 位域(选读)位域(选读) l 共同体(选读)共同体(选读) l 枚举类型的定义枚举类型的定义 l 枚举变量的定义和使用枚举变量的定义和使用 3 结构体类型的定义结构体类型的定义 l 结构体属于构造数据类型结构体属于构造数据类型 : 数组是一组相同类型数据组成的集合体;结构体是若干个

2、不同类型数据组成的集合数组是一组相同类型数据组成的集合体;结构体是若干个不同类型数据组成的集合 体。结构体弥补了数组的不足,使得一个结构体数据可以包含多种类型的数据项。体。结构体弥补了数组的不足,使得一个结构体数据可以包含多种类型的数据项。 一个结构体类型由若干个不同类型的成员数据项组成,用一个类型名来命名,这样一个结构体类型由若干个不同类型的成员数据项组成,用一个类型名来命名,这样 就可将这些不同类型的成员数据项作为一个整体来处理。就可将这些不同类型的成员数据项作为一个整体来处理。 【例】描述学生的数据项有:学号、姓名、性别、成绩,可将这些不同类型的数据项【例】描述学生的数据项有:学号、姓名

3、、性别、成绩,可将这些不同类型的数据项 作为一个整体来处理,定义一个名为作为一个整体来处理,定义一个名为 student 的数据类型,包括的数据类型,包括 id、name、 sex、score 四个成员数据项,那么四个成员数据项,那么 student 就是一个结构体类型。就是一个结构体类型。 struct student int id ; char name 10 ; char sex ; float score ; ; 4 结构体类型的定义结构体类型的定义 l 结构体类型的定义结构体类型的定义 : struct 结构体类型名结构体类型名 类型类型 成员名成员名1 ; 类型类型 成员名成员名2

4、 ; 类型类型 成员名成员名 n ; ; /此处分号不可缺少此处分号不可缺少 l 几点说明:几点说明: 结构体类型名结构体类型名按标识符命名规则命名。注意:结构体类型是一种构造的数据类按标识符命名规则命名。注意:结构体类型是一种构造的数据类 型,定义一个结构体类型,就是定义该结构体中成员的结构框架,编译系统不为任型,定义一个结构体类型,就是定义该结构体中成员的结构框架,编译系统不为任 何数据类型分配存储空间,当然也不为结构体类型分配存储空间!何数据类型分配存储空间,当然也不为结构体类型分配存储空间! 结构体成员结构体成员花括号中依次列出组成该结构体类型的各个成员,并对各成员进行花括号中依次列出

5、组成该结构体类型的各个成员,并对各成员进行 类型声明,成员的类型可以是类型声明,成员的类型可以是C+中任意基本数据类型,也可以是已定义的构造数中任意基本数据类型,也可以是已定义的构造数 据类型。注意:声明成员时,不能指定其存储类型为:据类型。注意:声明成员时,不能指定其存储类型为: auto、register、extern , 因为系统并不为结构体类型分配存储空间,但可以指定成员的存储类型为因为系统并不为结构体类型分配存储空间,但可以指定成员的存储类型为 static , 关于结构体中关于结构体中 static 静态成员的作用本章后续介绍。静态成员的作用本章后续介绍。 5 结构体变量的定义结构

6、体变量的定义 l 结构体变量的定义结构体变量的定义 : 格式格式1: 存储类型存储类型 结构体类型名结构体类型名 变量名变量名1 ,变量名,变量名2 ; 格式格式2: 存储类型存储类型 struct 结构体类型名结构体类型名 变量名变量名1 ,变量名,变量名2 ; l 几点说明:几点说明: 存储类型有存储类型有 auto、static、register、extern 四种。当存储类型省略时,对于局部四种。当存储类型省略时,对于局部 结构体变量,表示结构体变量,表示auto。 定义结构体变量时,系统按结构体类型中的成员框架为其分配一段连续的存储空间,定义结构体变量时,系统按结构体类型中的成员框架

7、为其分配一段连续的存储空间, 依次存放各个成员的数据,所占内存的字节数为各个成员所占字节数之和。依次存放各个成员的数据,所占内存的字节数为各个成员所占字节数之和。 结构体变量的作用域与一般变量的作用域相同,全局结构体变量具有文件作用域,结构体变量的作用域与一般变量的作用域相同,全局结构体变量具有文件作用域, 局部结构体变量具有块作用域。局部结构体变量具有块作用域。 结构体变量的生存期也与一般变量的生存期相同,结构体变量的生存期也与一般变量的生存期相同,全局结构体变量、全局结构体变量、static静态局部静态局部 结构体变量存放在静态区,结构体变量存放在静态区,auto局部结构体变量存放在栈区。

8、局部结构体变量存放在栈区。 6 结构体变量的定义结构体变量的定义 定义结构体变量的方法有三种:定义结构体变量的方法有三种: 先定义结构体类型,再定义结构体类型的变量。先定义结构体类型,再定义结构体类型的变量。 定义结构体类型的同时,紧跟着定义结构体类型的变量。定义结构体类型的同时,紧跟着定义结构体类型的变量。 定义无名的结构体类型,并同时定义结构体类型的变量。定义无名的结构体类型,并同时定义结构体类型的变量。 【例】【例】 #include struct person int id ; char name 10 ; ; struct date int year ; int month ; in

9、t day ; d1 ; /定义结构体类型的同时,紧跟着定义其变量。定义结构体类型的同时,紧跟着定义其变量。 struct int hour ; /无名结构体类型无名结构体类型 int minute ; int second ; t1 , t2 ; /定义无名结构体类型,并同时定义其变量。定义无名结构体类型,并同时定义其变量。 person p1 , p2 ; /先定义结构体类型,再定义结构体变量。先定义结构体类型,再定义结构体变量。 7 结构体变量的使用结构体变量的使用 l 结构体变量的初始化:与数组类同,在定义结构体变量时,用花括号将每一个成员结构体变量的初始化:与数组类同,在定义结构体变

10、量时,用花括号将每一个成员 的初值括起来赋给该变量。注意,花括号中列出初值其类型和顺序必须与结构体类的初值括起来赋给该变量。注意,花括号中列出初值其类型和顺序必须与结构体类 型定义中所声明的成员一一对应。型定义中所声明的成员一一对应。 【例】【例】 student s1 = 408001 , “张小笑张小笑” , F , 98 ; l 结构体变量成员的引用:(使用成员运算符结构体变量成员的引用:(使用成员运算符 “.” ) 结构体变量名结构体变量名 . 成员名成员名 l 几点说明:几点说明: 同类型的结构体变量之间可以相互赋值,这种赋值等同于各个成员的依次赋值。同类型的结构体变量之间可以相互赋

11、值,这种赋值等同于各个成员的依次赋值。 结构体变量不能直接进行输入结构体变量不能直接进行输入/输出,它的每一个成员能否直接进行输入输出,它的每一个成员能否直接进行输入/输出,取决输出,取决 于其成员的类型,若是基本数据类型或字符数组,则可以直接进行输入于其成员的类型,若是基本数据类型或字符数组,则可以直接进行输入/输出。输出。 8 【例】【例】 #include #include struct student int id ; char name 10 ; char sex ; float score ; ; void main ( ) student s1 = 408001 , “张小笑张小

12、笑” , m , 98 ; cout “s1=” s1.id t t s1.sex t s1.score endl; student s2 , s3 ; cout s2.id s2.sex s2.score ; cout “s2=” s2.id t t s2.sex t s2.score endl; s3 = s2 ; cout “s3=” s3.id t t s3.sex t s3.score endl; s3.id = 408003 ; strcpy( , “王嘻嘻王嘻嘻” ) ; cout “s3=” s3.

13、id t t s3.sex t s3.score endl; 运行:运行: s1= 408001 张小笑张小笑 m 98 请输入学号请输入学号 、姓名、姓名 、性别、性别( m / f ) 、成绩、成绩 : 408002 王哈哈王哈哈 f 88 s2= 408002 王哈哈王哈哈 f 88 s3= 408002 王哈哈王哈哈 f 88 s3= 408003 王嘻嘻王嘻嘻 f 88 9 结构体变量的使用结构体变量的使用 结构体中成员的类型可以是结构体中成员的类型可以是C+中任意基本数据类型,也可以是已定义的构造数据中任意基本数据类型,也可以是已定义的构造数据 类型,因此当然可以是

14、已定义的结构体类型,当要访问嵌套在内层的结构体成员时,类型,因此当然可以是已定义的结构体类型,当要访问嵌套在内层的结构体成员时, 同样使用成员运算符同样使用成员运算符 “.” 来实现。来实现。 【例】【例】 #include struct date int year ; int month ; int day ; ; struct student int id ; char name 10 ; char sex ; date birthday ; float score ; ; void main ( ) student s = 408001 , “张小笑张小笑” , m , 1991 , 5

15、 , 15 , 98 ; cout s.id t t s.sex t s.birthday.year t ; cout s.birthday.month t s.birthday.day t s.score endl ; 运行:运行: 408001 张小笑张小笑 m 1991 5 15 98 id name sex birthday score year month day student 10 结构体变量的使用结构体变量的使用 结构体变量与一般变量一样,可以作为函数的参数,同样结构体类型也可以作为函结构体变量与一般变量一样,可以作为函数的参数,同样结构体类型也可以作为函 数返回

16、值的类型。数返回值的类型。 【例】【例】 #include struct complex float real , image ; ; /定义一个表示复数的结构体类型定义一个表示复数的结构体类型 void swap1 ( complex c1 , complex c2 ) complex t ; t = c1 ; c1 = c2 ; c2 = t ; void swap2 ( complex t = c1 ; c1 = c2 ; c2 = t ; complex add ( complex c1 , complex c2 ) /两个复数相加,返回的和也是复数两个复数相加,返回的和也是复数 co

17、mplex t ; t.real = c1.real + c2.real ; t.image = c1.image + c2.image ; return t ; 11 void main ( ) complex c1 = 5 , 7 , c2 = 3 , 2 , c3 ; cout “c1 = ( ” c1.real “ , ” c1.image “i ) n” ; cout “c2 = ( ” c2.real “ , ” c2.image “i ) nn” ; swap1( c1 , c2 ) ; cout “c1 = ( ” c1.real “ , ” c1.image “i ) n”

18、; cout “c2 = ( ” c2.real “ , ” c2.image “i ) nn” ; swap2( c1 , c2 ) ; cout “c1 = ( ” c1.real “ , ” c1.image “i ) n” ; cout “c2 = ( ” c2.real “ , ” c2.image “i ) nn” ; c3 = add( c1 , c2 ) ; cout “c3 = ( ” c3.real “ , ” c3.image “i ) n” ; 运行:运行: c1 = ( 5 , 7i ) c2 = ( 3 , 2i ) c1 = ( 5 , 7i ) c2 = ( 3

19、 , 2i ) c1 = ( 3 , 2i ) c2 = ( 5 , 7i ) c3 = ( 8 , 9i ) 12 结构体数组结构体数组 l 结构体数组:数组是一组相同类型的元素组成的集合体,结构体数组:数组是一组相同类型的元素组成的集合体, 而数组元素的类型当然可而数组元素的类型当然可 以是已定义的结构体类型,这种由结构体变量组成的数组称为结构体数组。以是已定义的结构体类型,这种由结构体变量组成的数组称为结构体数组。 【例】(结构数组)【例】(结构数组) #include struct student int id ; char name 10 ; char sex 4 ; float s

20、core ; ; void input ( student void output ( student cout “t性别性别=” s.sex “t成绩成绩=” s.score endl ; 13 void sort ( student s , int n ) int i , j ; student t ; for ( i=0 ; in-1 ; i+ ) for ( j=i+1 ; jn ; j+ ) if ( s i .score s j .score ) t = s i ; s i = s j ; s j = t ; void main ( ) int i ; student s 4 ;

21、for ( i=0 ; i4 ; i+ ) input( s i ) ; cout “排序前:排序前:n” ; for ( i=0 ; i4 ; i+ ) output( s i ) ; sort( s , 4 ) ; cout “排序后:排序后:n” ; for ( i=0 ; i4 ; i+ ) output( s i ) ; 运行:运行: 请输入学号、姓名、性别、成绩请输入学号、姓名、性别、成绩 : 408001 王哈哈王哈哈 男男 65 请输入学号、姓名、性别、成绩请输入学号、姓名、性别、成绩 : 408002 李依依李依依 女女 97 请输入学号、姓名、性别、成绩请输入学号、姓名、性

22、别、成绩 : 408003 张晓晓张晓晓 男男 71 请输入学号、姓名、性别、成绩请输入学号、姓名、性别、成绩 : 408004 孟虎虎孟虎虎 女女 83 排序前排序前 : 学号学号=408001 姓名姓名=王哈哈王哈哈 性别性别=男男 成绩成绩=65 学号学号=408002 姓名姓名=李依依李依依 性别性别=女女 成绩成绩=97 学号学号=408003 姓名姓名=张晓晓张晓晓 性别性别=男男 成绩成绩=71 学号学号=408004 姓名姓名=孟虎虎孟虎虎 性别性别=女女 成绩成绩=83 排序后排序后 : 学号学号=408002 姓名姓名=李依依李依依 性别性别=女女 成绩成绩=97 学号学号

23、=408004 姓名姓名=孟虎虎孟虎虎 性别性别=女女 成绩成绩=83 学号学号=408003 姓名姓名=张晓晓张晓晓 性别性别=男男 成绩成绩=71 学号学号=408001 姓名姓名=王哈哈王哈哈 性别性别=男男 成绩成绩=65 14 【例】(有三位侯选人,输入各张选票上得票人的名字,统计出各人的得票数。【例】(有三位侯选人,输入各张选票上得票人的名字,统计出各人的得票数。 ) #include #include struct person char name 10 ; int count ; ; void main ( ) int i ; char name 10 ; person lea

24、der 3 = “王哈哈王哈哈” , 0 , “肖嘻嘻肖嘻嘻” , 0 , “乐咪咪乐咪咪” , 0 ; cout name ; while ( strcmp( name , “0” ) != 0 ) for ( i=0 ; i name ; cout “统计结果:统计结果:n” ; for ( i=0 ; i3 ; i+ ) cout leader i .name “ = ” leader i .count “tt” ; cout 结构体指针结构体指针 - 成员名成员名 格式格式2:通过点成员运算符:通过点成员运算符 . (*结构体指针)结构体指针). 成员名成员名 17 【例】【例】 #i

25、nclude struct student int id ; char name 10 ; float score ; ; void main ( ) student s = 408001 , “张小笑张小笑” , 98 ; student *p = cout “s=” s.id t t s.score endl ; cout “s=” (*p). id t (*p). name t (*p). score endl ; cout “s=” id t name t score endl ; 运行:运行: s = 408001 张小笑张小笑 98 s = 408001 张小笑张小笑

26、 98 s = 408001 张小笑张小笑 98 408001 张小笑张小笑 98 id name score s p 18 【例】(结构体中的【例】(结构体中的static静态成员)静态成员) #include struct student int id ; char name 10 ; char sex 4 ; float score ; static int count ; /静态成员,引用性声明静态成员,引用性声明 ; int student : count = 3 ; /静态成员,定义性声明静态成员,定义性声明 void main ( ) student s1 , s2 ; cout

27、 “s1:” s1.count endl ; cout “s2:” s2.count endl ; s2.count = 6 ; cout “s1:” s1.count endl ; cout “s2:” s2.count endl ; 运行:运行: 3 6 6 19 位域(选读)位域(选读) l 位域:位域: 位域:指在一个字或字节中,用若干个二进制位来建立若干个标志位(一个标志用位域:指在一个字或字节中,用若干个二进制位来建立若干个标志位(一个标志用0 或或1来表示),具体作法是将一个字或一个字节根据需要划分成若干个位域。来表示),具体作法是将一个字或一个字节根据需要划分成若干个位域。 位

28、域的定义:就是定义一个结构体类型,在结构体类型中指定每一个成员占用的二位域的定义:就是定义一个结构体类型,在结构体类型中指定每一个成员占用的二 进制位数,即位域。进制位数,即位域。 一个位域成员的长度不能大于一个字的长度。一个位域成员的长度不能大于一个字的长度。 l 位域类型的定义位域类型的定义 : struct 结构体类型名结构体类型名 unsigned 位域名位域名1 : 二进制位数二进制位数 ; unsigned 位域名位域名2 : 二进制位数二进制位数 ; unsigned 位域名位域名n : 二进制位数二进制位数 ; ; /此处分号不可缺少此处分号不可缺少 20 位域(选读)位域(选

29、读) l 几点说明:几点说明: 位域名按标识符命名规则命名。位域名按标识符命名规则命名。 位域的成员类型必须是无符号整型。位域的成员类型必须是无符号整型。 一个结构体类型中定义的任何一个位域都必须在同一个字中,若本字中剩余的二进一个结构体类型中定义的任何一个位域都必须在同一个字中,若本字中剩余的二进 制位数不够定义一个位域时,则该字的剩余二进制位不用,而从下一个字开始。若制位数不够定义一个位域时,则该字的剩余二进制位不用,而从下一个字开始。若 需要跳过某些不用的二进制位,也可定义一个无名的位域。需要跳过某些不用的二进制位,也可定义一个无名的位域。 【例】【例】struct data unsig

30、ned flag1 : 2 ; unsigned flag2 : 4 ; unsigned : 2 ; /无名位域,跳过无名位域,跳过2个不用的二进制位个不用的二进制位 unsigned flag3 : 6 ; unsigned flag4 : 2 ; ; 21 位域(选读)位域(选读) l 位域变量的定义:(等同于结构体变量的定义)位域变量的定义:(等同于结构体变量的定义) 格式格式1: 存储类型存储类型 结构体类型名结构体类型名 变量名变量名1 ,变量名,变量名2 ; 格式格式2: 存储类型存储类型 struct 结构体类型名结构体类型名 变量名变量名1 ,变量名,变量名2 ; l 位域变

31、量的使用:(等同于结构体变量的使用)位域变量的使用:(等同于结构体变量的使用) 同类型的位域变量之间可以相互赋值,这种赋值等同于各个成员的依次赋值。位域同类型的位域变量之间可以相互赋值,这种赋值等同于各个成员的依次赋值。位域 变量与结构体变量一样,也可以作为函数的参数。变量与结构体变量一样,也可以作为函数的参数。 位域变量不能直接进行输入位域变量不能直接进行输入/输出,位域变量的每个成员都是作为一个整型变量来使输出,位域变量的每个成员都是作为一个整型变量来使 用,但是其取值范围受到指定给其的二进制位数限制,若所赋的值大于该成员所能用,但是其取值范围受到指定给其的二进制位数限制,若所赋的值大于该

32、成员所能 表示的范围,超过的高位部分被舍弃,即按取模后的数存入该成员。表示的范围,超过的高位部分被舍弃,即按取模后的数存入该成员。 使用位域的目的是节省内存空间,但存取位域变量值时所花费的时间较多,若内存使用位域的目的是节省内存空间,但存取位域变量值时所花费的时间较多,若内存 足够大,使用位域就没有意义了。位域变量主要用于系统程序设计中。足够大,使用位域就没有意义了。位域变量主要用于系统程序设计中。 22 【例】(位域)【例】(位域) #include #include struct data unsigned f1 : 2 ; unsigned f2 : 4 ; unsigned : 2 ;

33、 unsigned f3 : 6 ; unsigned f4 : 2 ; ; void main ( ) data d1 , d2 ; d1.f1 = 5 ; d1.f2 = 5 ; d1.f3 = 0 x3f ; d1.f4 = 3 ; cout “d1:” setw(10) d1.f1 setw(10) d1.f2 ; cout setw(10) d1.f3 setw(10) d1.f4 ; cout “tt字节数:字节数:” sizeof( d1 ) endl ; d2 = d1 ; cout “d2:” setw(10) d2.f1 setw(10) d2.f2 ; cout setw

34、(10) d2.f3 setw(10) d2.f4 ; cout “tt字节数:字节数:” sizeof( d2 ) endl ; 运行:运行: d1: 1 5 63 3 字节数:字节数:4 d2: 1 5 63 3 字节数:字节数:4 23 共同体(选读)共同体(选读) l 共同体(联合体)属于构造数据类型共同体(联合体)属于构造数据类型 :指将不同类型的变量组织成一个整体,利用:指将不同类型的变量组织成一个整体,利用 内存覆盖技术,使它们在内存中共用同一段存储区域。内存覆盖技术,使它们在内存中共用同一段存储区域。 l 共同体与结构体区别:结构体变量所占内存长度是各成员所占内存长度之和,各成

35、共同体与结构体区别:结构体变量所占内存长度是各成员所占内存长度之和,各成 员独自占有自己的内存区域。而共同体变量所占内存长度是其最长成员的长度,各员独自占有自己的内存区域。而共同体变量所占内存长度是其最长成员的长度,各 成员共用同一段内存区域。成员共用同一段内存区域。 l 共同体类型的定义共同体类型的定义 : union 共同体类型名共同体类型名 类型类型 成员名成员名1 ; 类型类型 成员名成员名2 ; 类型类型 成员名成员名 n ; ; /此处分号不可缺少此处分号不可缺少 l 说明:对结构体类型所作的说明也适用于共同体。说明:对结构体类型所作的说明也适用于共同体。 24 共同体(选读)共同

36、体(选读) l 共同体变量的定义:(雷同于结构体变量的定义)共同体变量的定义:(雷同于结构体变量的定义) 格式格式1: 存储类型存储类型 共同体类型名共同体类型名 变量名变量名1 ,变量名,变量名2 ; 格式格式2: 存储类型存储类型 union 共同体类型名共同体类型名 变量名变量名1 ,变量名,变量名2 ; l 共同体变量的使用:共同体变量的使用: 一个共同体变量中的所有成员共用同一段内存区域,共同体变量所占内存区域的大一个共同体变量中的所有成员共用同一段内存区域,共同体变量所占内存区域的大 小由占用最大内存区域的成员所决定。小由占用最大内存区域的成员所决定。 任一时刻,一个共同体变量中只

37、能有一个成员起作用。任一时刻,一个共同体变量中只能有一个成员起作用。 定义共同体变量时不能对其进行初始化定义共同体变量时不能对其进行初始化 。 使用共同体的目的是节省内存空间,现在内存越来越大,通常的程序设计中已较少使用共同体的目的是节省内存空间,现在内存越来越大,通常的程序设计中已较少 使用。共同体主要用于计算机底层的程序设计中。使用。共同体主要用于计算机底层的程序设计中。 l 共同体变量成员的引用:(使用成员运算符共同体变量成员的引用:(使用成员运算符 “.” ) 共同体变量名共同体变量名 . 成员名成员名 25 【例】(共同体)【例】(共同体) #include #include uni

38、on data char a ; int b ; short m ; float n ; ; void main ( ) data d ; d.b = 39000 ; cout “各成员值:各成员值:” setw(4) d.a setw(12) d.b ; cout setw(12) d.m setw(20) d.n endl ; d.a = A ; cout “各成员值:各成员值:” setw(4) d.a setw(12) d.b ; cout setw(12) d.m setw(20) d.n endl ; cout “字节数字节数=” sizeof( d ) “t首地址首地址=” (i

39、nt) cout “a地址地址=” (int) cout “tm地址地址=” (int) a b c ddata 运行:运行: 各成员值:各成员值: X 39000 -26536 5.46506e-041 各成员值:各成员值: A 38977 -26559 5.46184e-041 字节数字节数=4 首地址首地址=1245052 a地址地址=1245052 b地址地址=1245052 c地址地址=1245052 d地址地址=1245052 26 枚举类型的定义枚举类型的定义 l 枚举类型属于构造数据类型枚举类型属于构造数据类型 : 如果一个变量仅有几种可能的取值,可以定义为枚举类型的变量。在定

40、义枚举类型如果一个变量仅有几种可能的取值,可以定义为枚举类型的变量。在定义枚举类型 的变量之前,必须先定义枚举类型。的变量之前,必须先定义枚举类型。 枚举类型是指将可能的取值一一列举出来,对于该枚举类型的变量,其取值仅限于枚举类型是指将可能的取值一一列举出来,对于该枚举类型的变量,其取值仅限于 列举出来的范围内。枚举类型是为了一些具有特殊列举出来的范围内。枚举类型是为了一些具有特殊“离散离散”值域的数据而引入的。值域的数据而引入的。 【例】对于取值于【例】对于取值于 “星期几星期几” 的数据,可定义一个名为的数据,可定义一个名为 weekday 的数据类型,该类的数据类型,该类 型的变量取值仅

41、限于型的变量取值仅限于 sun、mon、tue、wed、thu、fri、sat 七个中的一个,那么七个中的一个,那么 weekday 就是一个枚举类型。就是一个枚举类型。 enum weekday sun , mon , tue , wed , thu , fri , sat ; weekday w1 = mon ; /w1是是weekday类型的变量类型的变量 weekday w2 = sat ; /w2是是weekday类型的变量类型的变量 27 枚举类型的定义枚举类型的定义 l 枚举类型的定义枚举类型的定义 : enum 枚举类型名枚举类型名 枚举常量枚举常量1 ,枚举常量,枚举常量2

42、, , 枚举常量枚举常量n ; l 几点说明:几点说明: 枚举常量(枚举元素)是以标识符形式表示的整型量,不是字面常量。各枚举常量枚举常量(枚举元素)是以标识符形式表示的整型量,不是字面常量。各枚举常量 代表该枚举类型变量的可能取值,它们之间以代表该枚举类型变量的可能取值,它们之间以“ , ”分隔。分隔。 编译器为每个枚举常量指定一个内部整数值,默认状态下,这个整数值就是列举时编译器为每个枚举常量指定一个内部整数值,默认状态下,这个整数值就是列举时 的顺序号,序号从的顺序号,序号从0开始,按列举顺序依次为:开始,按列举顺序依次为: 0、1、2、3、. 。 【例】【例】enum color re

43、d , yellow , blue , black , white ; 则枚举常量则枚举常量 red、yellow、blue、black、white 的值分别是:的值分别是: 0、1、2、3、4 。 28 枚举类型的定义枚举类型的定义 定义枚举类型时,也可为部分或全部的枚举常量另行指定整数值,而对于具有指定定义枚举类型时,也可为部分或全部的枚举常量另行指定整数值,而对于具有指定 值后面那些无指定的枚举常量,则按依次加值后面那些无指定的枚举常量,则按依次加1的原则取值。注意,各枚举常量的整数的原则取值。注意,各枚举常量的整数 值可以相同,但各枚举常量的标识符必须不同。值可以相同,但各枚举常量的标识符必须不同。 【例】【例】 enum weekday sun=7 , mon=1 , tue , wed ,

温馨提示

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

评论

0/150

提交评论