- 1、本文档共145页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
第8章结构、共用和枚举类型;
前面介绍的整型、浮点型、字符型等数据类型都是单一数据类型,即便是包含多个元素的数组,也只能存储同一种数据类型的数据。但在实际问题中,常常需要把一些属于不同数据类型的数据作为一个整体来处理。如一个学生的通信地址(包括姓名、部门、地址、邮编、电话号码、电子邮箱等)或一个学生的成绩表(包括班级、学号、姓名、性别、数学成绩、数据库成绩、英语成绩等),如图8-1所示。这些表集合了各种标准类型数据,无法用前面学过的任一种数据类型完全描述,因此,C语言引入一种能集不同数据类型于一体的非单一数据类型—结构类型。此外,本章还将介绍另两种非单一数据类型—共用类型和枚举类型。;
;
8.1结构类型;
一般来说,结构所具有的特性与数组有很大不同。结构的元素(在C语言中的说法是结构的成员)可能具有不同的类型。而且,每个成员都有名字,因此为了选择特定的成员需要指明成员的名字而不是它的位置。
由于大多数编程语言提供类似的特性,因此结构可能听起来很熟悉。在其他一些语言中,经常把结构称为记录(Record),把结构的成员称为字段(Field)。;
当需要存储相关数据项的集合时,结构是一种合乎逻辑的选择。例如,假设需要记录存储在仓库中的零件。每种零件需要存储的信息可能包括零件的编号(整数)、零件的名称(字符串)以及现有零件的数量(整数)。为了产生一个可以存储这三种数据项的变量,可以使用类似下面这样的声明:;
struct是一个关键字,表示结构类型定义的开始。结构名的命名要求符合标识符命名规则。结构成员可以是char、int、float、double、数组、指针、结构等各种数据类型。成员名的命名跟普通变量一样,所有成员用花括号括起来,构成一个整体。结构类型定义语句以分号作为结束符。注意,这里的声明格式和C语言中其他变量的声明格式一样。part1和part2是具有这种类型的变量,称为结构类型变量。;
结构的成员在内存中是按照声明的顺序存储的。为了说明part1在内存中存储的形式,现在假设:(1)part1存储在地址为2000的内存单元中;(2)???个整数在内存中占4字节;(3)NAME_LEN的值为25;(4)成员之间没有间隙。根据这些假设,part1在内存中的样子如图8-2所示。;;
每个结构代表一种新的作用域。任何声明在此作用域内的名称都不会和程序中的其他名称冲突。(用C语言的术语可表述为,每个结构都为它的成员设置了独立的命名空间。)例如,下列声明可以出现在同一程序:;
和数组一样,结构类型变量也可以在声明的同时进行初始化。为了对结构进行初始化,要把待存储到结构中的值的列表准备好并用花括号把它括起来。例如;
初始化中的值必须按照结构成员的顺序进行显示。在此例中,结构part1的成员number值为528,成员name则是Diskdrive,依次类推。结构part1初始化后的样子如图8-3所示。;
2.结构类型和结构类型变量的定义
虽然上节说明了声明结构类型变量的方法,但是没有讨论一个重要的问题:命名结构。假设程序需要声明几个具有相同成员的结构类型变量。如果一次可以声明全部变量,那么没有什么问题。但是,如果需要在程序中的不同位置声明变量,那么问题就复杂了。;
如果在某处编写了;
那么问题出现了。重复的结构信息会使程序膨胀。因为难以确保这些声明会保持一致,将来修改程序会有风险。
此外,根据C语言的规则,part1和part2不具有兼容的类型,因此不能把part1赋值给part2,反之亦然。而且,因为part1和part2的类型都没有名字,所以也就不能把它们用作函数调用的参数。;
为了解决这些问题,需要定义表示结构(而不是特定的结构)的名称。结构类型定义的一般形式为;
在一个结构类型中,将一些不同类型的数据组合成一个整体,虽然各个成员数据分别有着不同的数据类型,但是它们之间密切相关。下面先看一个联系人的结构类型定义。;
在联系人的结构类型定义中,将一个联系人的姓名、部门、地址、邮编、电话号码和电子邮箱组合成了一个整体,虽然各个成员数据分别有着不同的数据类型,但是各个成员数据都属于同一个联系人的。
结构类型定义并没有说明任何实际的变量,它仅仅是定义一种特殊的数据类型,它与系统标准类型(如int、char、float、longint等)一样可以用来定义变量。;
在定义了一个结构类型后,还需要对相应的变量进行定义,定义一个结构类型变量的方法有三种方式。
1)先定义结构类型再定义变量
先定义结构类型。
结构类型变量stu1和stu2均为结构类型structscore的变量,即它们具有structscore定义的结构,如图8-4所示。;
文档评论(0)