- 1、本文档共114页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第9章 结构与联合 概述 结构的声明 访问结构成员 结构的初始化 结构作函数的参数 结构数组 结构与指针 结构的存储分配 位段 联合 9.1 概述 正如通过数组了解到的,一个复杂数据类型的特征在于它的元素类型和它的构造方法。而且对其构造方法的刻画有着更重要的意义。 数组是个数固定、类型相同的元素的集合。数组元素的这一基本特征决定了数组只适用于处理“若干实体的同一属性”这类问题,例如,某班学生的同一课程的成绩。它通常用下标来区分不同的实体。 9.1 概述 结构是个数固定、类型可以不同的元素的集合。它的元素一般称为成员(member)。可见,数组与结构的相同之处是元素个数都是预先确定的,而不同之处在于结构中的诸元素的类型可以不同。也正是这一不同导致结构的构造方法和访问手段与数组有重大差别。 数组元素可以通过下标访问,是因为数组元素的长度是等长的,它们可以一个紧挨一个等距离地存放在一起,就像一个长长的队伍,队伍中每个人都隐含着一个编号,而这个编号确定了他在队伍中的位置。结构的诸成员可能因为类型不同而其长度也就不同,所以不能用下标访问它们。取而代之的,只能赋予结构中的每个成员一个名称,通过名称访问这些成员。 9.1 概述 所以在确定一个结构类型时,与确定数组一样,需要给出元素(即成员)的个数;但是无法像数组那样,对其元素的类型进行统一描述,而只能采取逐个描述的方式。因此,对其成员的名称也不再采用数组中对各元素统一编号的方法,而改用对每个元素以特定的标识符命名。 由于结构的成员可以分属不同的数据类型,所以,结构特别适合处理“同一实体的若干属性”这类问题。例如,一个学生的学号、姓名、性别、所学专业等。 9.2 结构的声明 结构声明的一般形式 嵌套结构与自引用结构 用typedef创建新的类型 9.2.1 结构声明的一般形式 根据9.1节的讨论可知,在声明一个结构类型时,需要给出的信息是该结构所有成员的名称及其类型。 例如,日期是由年、月、日组成,可以把日期声明为一个结构: enum mons(jan,feb,mar,apr,may,jun,jul,aug,sep,oct,nov,dec); struct date { enum mons month; short day; int year; }; 9.2.1 结构声明的一般形式 在上述声明中,先声明了一个枚举类型mons,接着声明了一个结构类型struct date,它有三个成员,分别是month、day和year,它们的类型都互不相同。 声明一个结构类型的一般格式为: struct [结构标记][{成员列表}][变量列表]; 通常情况下,声明中的三个任选项“[…]”至少要任意选择其中两个,除非有特别的需求。也可能用到下面这种格式的声明: struct 结构标记; 9.2.1 结构声明的一般形式 上述声明的一般形式中,花括号内的成员列表具有如下形式: 类型 变量名;? 类型 变量名;? 其中,每个变量名是该结构的一个成员。下面是结构声明的一个例子: struct {? unsigned long number; char name[15];? char department[20];? }student; 9.2.1 结构声明的一般形式 这个声明省略了结构标记,它创建了一个名为student的结构变量,它有三个成员,它们分别是number(学号)、name(姓名)和department(系别)。考虑下面的声明: struct {? unsigned long number; char name[15];? char department[20];? }students[40],*p; 9.2.1 结构声明的一般形式 这个声明同样省略了结构标记,它在声明一个结构的同时还定义了一个有40个元素的数组,这个数组的每个元素是所声明的结构。它还定义了一个指针变量,它指向这样一个特定的结构类型。 从形式上看,上面这两个声明所声明的结构无论是成员个数,还是成员名及其类型都完全相同,两者似乎是同一个结构,但其实它们是两个完全不同的结构类型。事实上,只要是用不同的声明语句声明的结构,即使它们的成员列表完全相同,也分属不同的结构类型。因此,不能这样声明: 9.2.1 结构声明的一般形式 p = student; 因为指针p不能指向不同的数据类型。 考虑下面这个声明: struct stud {? unsigned long number; char name[15];? char department[20];? }; 9.
您可能关注的文档
- C语言程序设计教程第2版张磊第4章节循环结构程序设计.ppt
- C语言程序设计教程第2版张磊第5章节数组程序设计.ppt
- C语言程序设计教程第2版张磊第6章节函数程序设计.ppt
- C语言程序设计教程第2版张磊第8章节结构体程序设计.ppt
- C语言程序设计教程第2版张磊第9章节文件程序设计.ppt
- C语言程序设计教程第02章节.ppt
- C语言程序设计教程第03章节.ppt
- C语言程序设计教程第04章节.ppt
- C语言程序设计教程第05章节.ppt
- C语言程序设计教程第07章节.ppt
- 职业技术学院2024级工业机器人技术(安装与维护)专业人才培养方案.docx
- 职业技术学院2024级应用化工技术专业人才培养方案.pdf
- 职业技术学院2024级软件技术(前端开发)专业人才培养方案.pdf
- 职业技术学院2024软件技术专业人才培养方案.docx
- 职业技术学院2024级信息安全技术应用(安全运维)专业人才培养方案.docx
- 职业技术学院2024级新能源汽车检测与维修技术(车辆鉴定与评估)专业人才培养方案.pdf
- 职业技术学院2024级石油炼制技术专业人才培养方案.pdf
- 职业技术学院2024级环境监测技术专业人才培养方案.docx
- 职业技术学院2024级汽车制造与试验技术专业人才培养方案.pdf
- 职业技术学院2024级信息安全技术应用专业人才培养方案.pdf
文档评论(0)