高级语言程序设计-从C到C++(第二版)课件:自定义数据类型_第1页
高级语言程序设计-从C到C++(第二版)课件:自定义数据类型_第2页
高级语言程序设计-从C到C++(第二版)课件:自定义数据类型_第3页
高级语言程序设计-从C到C++(第二版)课件:自定义数据类型_第4页
高级语言程序设计-从C到C++(第二版)课件:自定义数据类型_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

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

文档简介

8.1结构体类型8.2共用体类型8.3枚举类型8.4用typedef声明新类型名8.1结构体类型使用基本数据类型定义的变量,相互独立、缺乏联系,因此,C语言提供了一个由基本数据类型组成的构造类型——数组。使用数组定义变量,以数据集的形式将同一类型的若干数据有序地组织在一起,如全班学生的学号或全班学生的成绩等。但在某些情况下,需要将不同类型的数据组合成一个有机的整体,如将学号、姓名、年龄、成绩等各项属性组织在一起,用来表示某个特定的学生;由于各项属性属于不同的数据类型,显然就不能通过定义数组来表示该数据了。C语言允许用户建立由不同数据类型组成的构造类型,这种数据类型被称为结构体类型。8.1.1结构体类型的声明结构体类型声明的一般形式为struct是声明结构体类型时必须使用的关键字,它向编译系统说明当前的自定义类型为结构体类型;Student是由用户指定的结构体名,又称结构体标记,习惯上,将首字母写为大写形式;structStudent为当前创建的结构体类型的类型名,和标准数据类型名(如int、char、float等)具有相同的作用,都可以用来定义变量、数组等;成员列表又称“域表”,由一对花括号括起,列表中的每个成员都是结构体中的一个域,可以被声明为已知的任何数据类型,声明成员的方法与定义变量相同。无论是声明成员的数据类型还是声明特定的结构体类型,最后都要以“;”标识语句的结束。使用关键字struct可以创建各种特定的结构体类型,例如,除了上面的structStudent,还可以创建structTeacher、structClassroom等,每一种结构体类型又可以包含各自不同的成员。成员可以被声明为已知的任何数据类型,包括C语言提供的标准数据类型和已经声明的自定义数据类型。可以将structStudent类型中的成员float型变量score改为structCourse类型变量score,用来记录各科成绩。但必须先声明structCourse类型,再在声明structStudent类型时使用structCourse类型定义成员。8.1.2使用结构体变量声明一个结构体类型,只是创建了一种数据类型,系统不会为类型分配存储单元。为了能够在程序中使用结构体类型的数据,需要为该结构体类型定义实体,如定义该结构体类型的变量,在变量的存储单元中存取数据。 使用结构体类型定义变量,可以采取以下三种方式。(1)先声明结构体类型,再定义变量:先声明类型,再定义变量,使用相对灵活,是最常用的方式。(2)声明结构体类型的同时定义变量:在声明类型的同时定义变量与上一种方式作用相同,此种方式书写简单,但不如上一种方式结构清晰。(3)不指定结构体类型名称而直接定义结构体类型变量:第三种方式声明了一个无结构体名的结构体类型,因此在声明完类型后,将没有一个可用的类型名去定义变量,所以只能在声明类型的同时定义变量。更为重要的是,自此以后只有stu1和stu2是同类型的变量,即使再声明一个结构体类型,其数据结构与stu1所属类型的数据结构完全相同,也被认为是不同的数据类型。定义了结构体变量后,系统会为之分配存储单元,理论上其大小为各成员所占存储空间的总和,以变量stu1为例,其所占字节数为5 + 10 + 1 + 4 + 4 = 24字节。然而为了满足“成员对齐”的要求,系统可能会在成员之间插入填充字节,因此结构体变量的大小可能会大于各成员大小的总和。8.1.3结构体变量的初始化和引用在定义结构体变量的同时可以对其初始化,初始化列表是由花括号括起来的常量集合,这些常量按类型的结构顺序依次赋值给变量中的各个成员,当然也可以采用逐一为成员赋值的形式。程序中对变量stu1采用初始化形式,对变量stu2通过逐一为成员赋值的形式建立数据。在定义完结构体变量之后,可以使用已有初始值的同类型结构体变量对其赋值,即是将stu1的各成员值依次拷贝给stu2对应的各成员。结构体变量的成员引用的一般格式为其中,“.”是成员运算符,结合性为从左至右。由于“.”在所有运算符中优先级最高,因此程序将“结构体变量名.成员名”作为整体参与各种引用。8.1.4使用结构体数组一个结构体变量可以存放一组不同类型的数据(如一个学生实体的各项属性)。如果需要表示若干学生的集合,则可以定义一个结构体数组。数组中的每个元素都是一个结构体变量,用于表示一名学生;每个变量的各个成员分别用于表示特定学生的各项属性。定义结构体数组的方法与定义结构体变量相似,只需要指明其为数组即可。(1)先声明结构体类型,再定义数组:(2)声明结构体类型的同时定义数组:(3)不指定结构体类型名称而直接定义结构体类型数组:初始化结构体数组的方法与初始化基本类型数组相似,在一对花括号内依次对每个元素的各个成员赋值,成员数据之间用“,”隔开,每个元素也可以用花括号括起,使得结构清晰。引用结构体数组元素成员的方法与引用结构体变量成员的相似,并且同样只能针对最低一级的成员进行引用。8.2共用体类型在程序设计中,通常定义某类型变量用于存取与其类型相同的数据,如果使用变量存取与其类型不同的数据,则有可能丢失数据或出错。在某些情况下,一个变量可能需要根据不同的应用环境表示不同类型的数据。C语言允许使用共用体类型定义变量,实现在同一段内存单元中存放不同类型的数据,以解决上述问题。8.2.1共用体类型的声明作为自定义数据类型,使用共用体类型定义变量前,需要先声明这一特定类型的数据结构。声明共用体类型的关键字是“union”,一般形式为8.2.2共用体变量的定义使用共用体类型定义变量的方法与使用结构体类型定义变量的相似,有如下三种方式。(1)先声明共用体类型,再定义变量:(2)声明共用体类型的同时定义变量:(3)不指定共用体类型名称而直接定义共用体类型变量:共用体变量将不同类型的成员存放到同一段内存单元中,这些成员在内存中所占的字节数不同,但都是从同一地址开始存放的,即&a=&a.s=&a.c=&a.f。因此,共用体变量的长度是占用内存单元最多的成员的长度。8.2.3共用体变量的初始化和引用共用体变量的所有成员共用同一段内存单元,从同一地址开始存取数据。显然,新存入的成员数据将会覆盖掉之前存放在内存单元中的成员数据,即在任何情况下,共用体变量的所有成员中只有其中的一个(即最后存入的)成员有效。(1)共用体变量初始化:C语言允许以初始化的形式为共用体变量的第一个成员指定初始值。共用体变量的所有成员共用同一段内存单元,在任何情况下,只有其中的一个成员有效,因此无法通过初始化同时为共用体变量的所有成员指定初始值。(2)共用体变量的引用。C程序不允许直接引用共用体变量,而只能对共用体变量中的某个成员进行引用。8.3枚举类型所谓枚举,就是将变量的可能取值一一列举出来,以后对于变量的引用,只限于列举出来的取值。8.3.1枚举类型的声明定义一个枚举类型变量前,需要先声明这个特定枚举类型的结构。声明枚举类型的关键字是“enum”,一般形式为结构体类型和共用体类型的成员是变量,需要在类型结构中用语句声明,以“;”标识语句结束;枚举元素作为符号常量,在类型声明中一一列举,元素之间用“,”间隔。结构体变量和共用体变量可以在类型声明之外对自己的成员赋值;枚举元素不是变量,不能在类型声明之外对它们重新赋值。8.3.2枚举变量的定义定义枚举变量的方法与定义结构体变量和共用体变量相似,有如下三种方式。(1)先声明枚举类型,再定义变量:(2)声明枚举类型的同时定义变量:(3)不指定枚举类型名称而直接定义枚举类型变量:枚举变量的取值只能从所有枚举元素中选择其一,而每个枚举元素代表一个整数常量,所以C语言中枚举变量的大小等于sizeof(int),即4字节长度。8.3.3枚举变量的初始化和引用可以在定义枚举变量的同时对其初始化,也可以在定义之后对变量赋值并引用。枚举变量的引用特点就是能令使用者见名知意,并且将取值限制在规定范围内,因此对枚举变量的赋值,建议使用枚举元素。枚举变量和枚举元素都可以进行整型参与的各项运算,如数值运算、比较运算和关系运算等,但一定注意不要因为参与运算而使枚举变量获得一个不在枚举元素列表中的值。8.4用typedef声明新类型名C语言允许使用关键字typedef指定新的类型名来代替已有的类型名。使用新的类型名定义变量,主要出于以下两点考虑。(1)用更具意义的名称定义变量,可以做到见名知意。为int类型指定别名Count,并使用Count定义整型变量i,可以突出变量i在程序中作为计数器使用的特征。(2)用更简单的名称定义变量,可以使书写更为简洁。使用一个新类型名的步骤为:(1)按定义变量的方法写出定义体(如“inta;”);(2)将变量名替换为新类型名(如“intCoun

温馨提示

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

评论

0/150

提交评论