收藏 分享(赏)

C++课件 第七章 结构体、共同体和枚举.ppt

上传人:11xg27ws 文档编号:8114544 上传时间:2019-06-09 格式:PPT 页数:29 大小:108KB
下载 相关 举报
C++课件 第七章 结构体、共同体和枚举.ppt_第1页
第1页 / 共29页
C++课件 第七章 结构体、共同体和枚举.ppt_第2页
第2页 / 共29页
C++课件 第七章 结构体、共同体和枚举.ppt_第3页
第3页 / 共29页
C++课件 第七章 结构体、共同体和枚举.ppt_第4页
第4页 / 共29页
C++课件 第七章 结构体、共同体和枚举.ppt_第5页
第5页 / 共29页
点击查看更多>>
资源描述

1、2019/6/9,Visual C+程序设计,1,第 章 结构体、共同体和枚举类型,2019/6/9,Visual C+程序设计,2,结构体,2019/6/9,Visual C+程序设计,3,数组中的每一个元素属于同一种数据类型,利用数组处理大量的同类型 数据是很方便的。但是在实际应用中,常常需要把不同类型而关系又非常密切的数据组织在一起,形成一个整体,以便于统一管理。 一种称为结构体的数据类型,可以用来描述这种类型的数据集。,结构是由基本数据类型构成的、并用一个标识符来命名的各种变量的组合。结构中可以使用不同的数据类型。结构通常用来定义存储在文件中的记录。,2019/6/9,Visual C

2、+程序设计,4,一:结构的定义 结构是一种派生类数据类型,在使用结构变量之前须先对结构进行定义。定义结构的一般格式为:struct 结构名 类型 变量名; 类型 变量名; . ; 结构名是结构的标识符不是变量名,花括号内的变量称之为结构的成员,类型可以是我们以前所学到的任意类型,甚至可以是结构但不能是结构本身,每个成员的类型可以不一样。 注意:每一个结构定义必须以分号结束!,2019/6/9,Visual C+程序设计,5,由于定义结构类型只是定义了一种数据类型,因此,当编译器编译结构体的定义时,并不为结构体中的成员分配任何内存空间,从而在定义结构体的成员时,不能指定成员的存储类型为auto、

3、register、extern,但可以指定结构体成员的存储类型为static,其特点和作用将在以后介绍。,2019/6/9,Visual C+程序设计,6,二:结构变量的定义 声明结构变量与声明其它类型变量类似,格式为: struct 结构名 结构变量名; 如: struct student int No; char name8; float score; ; student stu1,stu2 ,stu30;,也可在定义结构的同时定义结构变量,如: struct student int No; char name8; float score; stu1, stu2, stu30;,2019/

4、6/9,Visual C+程序设计,7,与基本数据类型类似,在定义结构体类型的变量时,也可对该变量进行初始化,其方法与对数组的初始化方法类似,即采用用花括号括起来的初始值表。注意,初始值表中的数据类型必须与结构体中对应元素的类型一致(兼容的除外),否则会产生编译错误。另外,初始值表中的数据的个数不能大于结构体中元素的个数。在定义结构体类型的变量时,也可以指定变量的存储类型。,2019/6/9,Visual C+程序设计,8,三:结构变量的初始化 struct student int No; char name8; float score; ; student stu1=9601, ”张三“,

5、96.5; student stu2=9601, ”张三“,96.5 ,9602,”李四“,80; 或者 struct student int No; char name8; float score; stu2=9601, ”张三“, 96.5 ,9602,”李四“,80;,2019/6/9,Visual C+程序设计,9,对于结构体类型的变量,在编译过程中,编译系统将为这些变量分配相应的内存空间,所分配的空间大小原则上为结构体中所有成员所占空间的总和。 结构体变量也存在作用域的问题,其作用域与一般变量的作用域相同。,2019/6/9,Visual C+程序设计,10,结构体类型变量的使用,对

6、结构体变量的使用一般是通过对其成员的引用实现的。使用结构体变量的成员的一般格式为:.其中,“是结构体成员运算符,2019/6/9,Visual C+程序设计,11,struct student int No; char name8; float score; ;,四:结构成员的访问 student stu1; cinstu1No; coutstu1name; stu1score=89.5;,2019/6/9,Visual C+程序设计,12,结构体类型变量本身也可参与一些运算:1) 同类型的结构体变量可以相互赋值。 2) 结构体类型变量不能直接进行输入输出。3) 结构体类型变量可以作为函数的参

7、数,函数的返回值也可以是结构体类型。当函数的形参与实参为结构体类型的变量时,其结合方式属于值传递方式。【例7.2】,2019/6/9,Visual C+程序设计,13,结构体数组,定义结构体数组的方法与定义结构体类型变量的方法类同,只是在定义时增加维数的说明,也有三种方法。在说明结构体数组时,可对它进行初始化,其方法与数组类似,有两种方法:第一种方法是将数组的每一个元素的成员的值用花括号括起来,再将数组的全部元素值用一对花括号括起来;第二种方法是在花括号内依次列出各个元素的成员值。【例7.3】,2019/6/9,Visual C+程序设计,14,结构体类型的静态成员,在定义结构体类型时,可以把

8、某一个成员的存储类型声明为静态的,这样,在这种结构体类型的所有变量中,编译系统只为该静态成员分配一个存储空间,即这种结构体类型的所有变量的静态成员的值都相同,只要改变了其中一个变量的静态成员的值,其它变量的该成员的值也随之改变。 【例7.5】,2019/6/9,Visual C+程序设计,15,编译系统一开始就为结构体的静态类型成员分配内存空间,并进行初始化。但在结构体中说明的静态成员属于引用性说明,在这里并不会为其分配内存空间,因此必须在文件作用域的某一个地方进行定义性说明,而且仅能说明一次。定义性说明的一般格式为::;其中与该静态成员的类型一致,符号“:”称为作用域运算符,它表示成员与结构

9、的一种隶属关系。静态成员可以脱离具体结构体变量而存取,即可以利用结构体名和作用域运算符表示该成员。在用初始值表对结构体变量初始化时,不再对静态成员置初值,即初始值表将跳过静态成员。,2019/6/9,Visual C+程序设计,16,* 位域,如将一个字或一个字节以二进位为单位划分为若干个区域,则每一个区域称为一个位域。位域通常用于表示较小范围内的数。定义位域的一般格式为:struct unsigned :; unsigned :; ;位域名可以省略。位域名后的,可为0或正整数,表示相应的位域所占用的二进位数。,2019/6/9,Visual C+程序设计,17,位域类型变量的使用方法与结构体

10、类型变量的使用方法完全相同。 (1) 在一个结构体中定义的任一个位域都必须在同一个存储单元中(4个字节共32位)。如果本存储单元中剩余的二进位不够定义一个位域成员时,则该存储单元的剩余的二进位不用,而从下一个存储单元开始。(2) 可以定义一个无名的位域成员,表示跳过若干个二进位。(3) 可以定义位数为0的位域成员,表示其下一个位域成员从下一个存储单元开始,此时该位域的位域名必须为空。,2019/6/9,Visual C+程序设计,18,(4)一个位域成员的长度不能大于一个存储单元的长度(32位)。(5)位域变量的使用方法与结构体变量的使用方法完全一样。 (6)同一个存储空间中位域的分配方向随机

11、器而异。 (7)当要存入一个成员中的数超过它所能表示的范围时,超过的高位将被去掉。(8)位域的优点是可以节省存储空间,但在存取位域变量时,花费的时间较多。,2019/6/9,Visual C+程序设计,19,共同体,与结构一样,共同体也是一种派生类数据类型,但是其成员共享同一存储空间,即成员公用一个内存位置,可在不同的时间保存不同的数据类型和不同长度的变量。,2019/6/9,Visual C+程序设计,20,定义共同体类型的一般格式为: union ; ; ; 共同体类型变量的说明方法与结构体类型变量的说明方法类似,也有三种方法。,一般情况下我们把结构和共同体定义在程序开头,然后在函数内定义

12、结构变量和共同体变量。,2019/6/9,Visual C+程序设计,21,由于共同体中的成员占用同一个内存空间,该存储空间的大小为占用存储空间最大的成员所占用的字节数。另外,在使用一个共同体类型变量的成员之前必须先指定该成员的值。,共用体成员的引用 同结构一样,可使用成员运算符“ ”。但值得注意的是,在同一个时候只能引用一个成员,引用当前成员,其它成员的值会被覆盖。,只能对共同体变量的第一个成员初始化,不能对整体初始化。,2019/6/9,Visual C+程序设计,22,【例】以下程序的运行结果是什么? union u_type int i; char ch6; / A long s; ;

13、 struct st_type u_type u; float score3; ; void main() coutsizeof(struct st_type)endl; ,20,考虑将A行改为: char ch8 或 char ch10 或 char ch12,2019/6/9,Visual C+程序设计,23,枚举类型(enum),2019/6/9,Visual C+程序设计,24,枚举是一种自定义类型,一个用标示符表示的整型常数的集合, 枚举在日常生活中很常见。,例如表示星期的 SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY,SA

14、TURDAY, 就是一个枚举。,枚举的说明与结构和共同体相似, 其形式为: enum 枚举名 标识符=整型常数, 标识符=整型常数, . 标识符=整型常数, 枚举变量;,如果枚举没有初始化, 即省掉“=整型常数“时, 则从第一个标识符开始, 顺次赋给标识符0,1,2, .。但当枚举中的某个成员赋值后, 其后的成员按依次加1的规则确定其值。,2019/6/9,Visual C+程序设计,25,例如下列枚举说明后, x1, x2, x3, x4的值分别为0, 1, 2, 3。 enum stringx1, x2, x3, x4 x;,当定义改变成: enum string x1, x2=0, x3

15、=50, x4 x; 则x1=0, x2=0, x3=50, x4=51,2019/6/9,Visual C+程序设计,26,注意:,枚举中每个成员(标识符)结束符是“,”, 不是“;”, 最后一个成员可省略“,”。 初始化时可以赋负数, 以后的标识符仍依次加1。 枚举元素可以作为整型常量使用,可以直接输出。 如:enum colorRed,Green,Blue; coutGreenendl; /此时结果为1 可以用枚举类型说明枚举类型变量,而且也有与结构体类型类似的三种说明方法。 在说明枚举类型变量时,也可对它进行初始化,此时可将某一个枚举元素作为它的初始值。,2019/6/9,Visual

16、 C+程序设计,27,通常将某个枚举元素赋给枚举类型的变量,但也可将相应的整数赋给枚举类型的变量,不过此时一定要进行强制类型转换。不过,可以将枚举变量或枚举元素直接赋值给整型变量。,如:enum colorRed=5,Green,Blue; color c=Blue; 此时, 枚举变量c实际上是7,即 coutcendl; 的结果为7而不是Blue! 但: color c=7;r 应该:color c=(color)(7); a 可以:int a=c; 或 int a=Blue; a,2019/6/9,Visual C+程序设计,28,例:定义一个描述三种颜色的枚举类型(Red,Green,Blue),输出这三种颜色的全部排列组合。 #include enum colorRed,Green,Blue; char color6=“Red“,“Green“,“Blue“; void main() int i,j,k; for(i=Red;i=Blue;i+) for(j=Red;j=Blue;j+) for(k=Red;k=Blue;k+) if(i!=j ,2019/6/9,Visual C+程序设计,29,课后练习:试卷汇编 P5T27 P6T29,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报