版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、本章学习内容 结构体数据类型,共用体数据类型、枚举数据类型、定义数据类型的别名 结构体变量、结构体数组、结构体指针的定义和初始化 结构体成员的引用、成员选择运算符、指向运算符 向函数传递结构体变量、结构体数组、结构体指针 动态数据结构、动态链表第1页/共60页第一页,编辑于星期五:十六点 十五分。 二进制数类型本不存在 内存里存的内容,你认为它是什么,它就是什么 在早期的机器指令及汇编语言中,数据对象均用二进制数表示,没有类型的概念 一般的CPU只支持两种类型 整数、浮点数第2页/共60页第二页,编辑于星期五:十六点 十五分。 在高级语言引入了基本数据类型 整型、浮点型、字符型等 不同语言会定
2、义不同的基本类型 基本数据类型并不能方便地解决所有问题 有些语言(如PL/1)中试图规定较多的类型,如数组、树、栈等,但实践证明不是个好办法第3页/共60页第三页,编辑于星期五:十六点 十五分。第4页/共60页第四页,编辑于星期五:十六点 十五分。12.2 结构体的定义为什么要定义结构体类型 在程序里表示一个人(姓名、年龄、性别),怎么表示? 想表示多个人呢? 如何用计算机程序实现下述表格的管理? 第5页/共60页第五页,编辑于星期五:十六点 十五分。数组的解决方法第6页/共60页第六页,编辑于星期五:十六点 十五分。数组的解决方法第7页/共60页第七页,编辑于星期五:十六点 十五分。 数据的
3、内存管理方式 数组的解决方法分配内存不集中,寻址效率不高分配内存不集中,寻址效率不高 对数组赋初值时,易发生错位对数组赋初值时,易发生错位 结构显得零散,不易管理结构显得零散,不易管理第8页/共60页第八页,编辑于星期五:十六点 十五分。希望的内存分配图 第9页/共60页第九页,编辑于星期五:十六点 十五分。结构体类型的声明声明了一个结构体类型声明了一个结构体类型构成结构体的变量称为结构构成结构体的变量称为结构体的成员体的成员(Structure Member)结构体的名字称为结构体结构体的名字称为结构体标签标签(Structure Tag)第10页/共60页第十页,编辑于星期五:十六点 十五
4、分。结构体类型的声明结构体模板结构体模板(Structure Template)Dont forget the semicolon!第11页/共60页第十一页,编辑于星期五:十六点 十五分。(1 1)先定义结构体类型,再定义变量名)先定义结构体类型,再定义变量名(2 2)在定义类型的同时定义变量(3 3)直接定义结构体变量(不指定结构体标签)第12页/共60页第十二页,编辑于星期五:十六点 十五分。用typedef定义数据类型struct student stu1, stu2;/*It works*/student stu1, stu2; /*Can this work?*/struct st
5、u1, stu2; /*Can this work?*/STUDENT stu1, stu2; /*It works!*/关键字关键字typedef为一种为一种已存在的已存在的类型类型定义一个定义一个别名别名,并未定义新类型,并未定义新类型STUDENT与与struct student类类型是型是同义词同义词第13页/共60页第十三页,编辑于星期五:十六点 十五分。等价于等价于等价于等价于第14页/共60页第十四页,编辑于星期五:十六点 十五分。 嵌套的结构体(Nested Structure)就是在一个结构体内包含了另一个结构体作为其成员 嵌套的结构体结构体定义结构体定义可以嵌套可以嵌套第1
6、5页/共60页第十五页,编辑于星期五:十六点 十五分。 访问结构体变量的成员必须使用成员选择运算符(也称圆点运算符) 结构体变量的引用第16页/共60页第十六页,编辑于星期五:十六点 十五分。【例12.1】演示结构体变量的赋值和引用方法结构体变量的引用按结构体的成员顺序逐一对相应成按结构体的成员顺序逐一对相应成员进行赋值员进行赋值格式符格式符%02d中中2d前面的前导符前面的前导符0表示输出数据时,若左边有多余表示输出数据时,若左边有多余位,则补位,则补0第17页/共60页第十七页,编辑于星期五:十六点 十五分。 【例12.1】若要从键盘输入结构体变量stu1的内容,那么程序如何修改?两个地址
7、有何不同?两个地址有何不同?第18页/共60页第十八页,编辑于星期五:十六点 十五分。 【例12.1】若要从键盘输入结构体变量stu1的内容,那么程序如何修改?结构体成员的地址与该成员在结构体成员的地址与该成员在结构体中所处的位置及其所占结构体中所处的位置及其所占内存的字节数相关内存的字节数相关结构体变量的地址结构体变量的地址&stu2是该变是该变量所占内存空间的首地址量所占内存空间的首地址第19页/共60页第十九页,编辑于星期五:十六点 十五分。结构体所占内存的字节数 struct 类型用内存字节数 = ? 是所有成员变量的内存总和吗?第20页/共60页第二十页,编辑于星期五:十六点
8、 十五分。结构体所占内存的字节数事实上,所有数据类型在内存中都是从事实上,所有数据类型在内存中都是从地址开始存放的地址开始存放的且结构所占的实际空间一般是按照机器字长对齐的且结构所占的实际空间一般是按照机器字长对齐的不同的编译器、平台,对齐方式会有变化不同的编译器、平台,对齐方式会有变化结构体变量的成员的存储结构体变量的成员的存储是与机器相关的是与机器相关的具有特定数据类型的具有特定数据类型的也是与机器相关的也是与机器相关的所以一个结构体在内存中的存储格式也是与机器相关的所以一个结构体在内存中的存储格式也是与机器相关的第21页/共60页第二十一页,编辑于星期五:十六点 十五分。12.3结构体数
9、组的定义和初始化第22页/共60页第二十二页,编辑于星期五:十六点 十五分。12.3结构体数组的定义和初始化建立了数据库中的多条记录,每条对应一个学生信息建立了数据库中的多条记录,每条对应一个学生信息第23页/共60页第二十三页,编辑于星期五:十六点 十五分。 【例12.3】利用结构体数组计算每个学生的平均分第24页/共60页第二十四页,编辑于星期五:十六点 十五分。12.4结构体指针的定义和初始化ptstu1 STUDENT stu1; STUDENT *pt; pt = &stu1;成员成员1成员成员2成员成员3成员成员4成成员员5等价于等价于第25页/共60页第二十五页,编辑于星
10、期五:十六点 十五分。12.4结构体指针的定义和初始化ptstu1成员成员1成员成员2成员成员3成员成员4成成员员5第26页/共60页第二十六页,编辑于星期五:十六点 十五分。12.4结构体指针的定义和初始化ptstu1成员成员1成员成员2成员成员3成员成员4成成员员5第27页/共60页第二十七页,编辑于星期五:十六点 十五分。12.4结构体指针的定义和初始化 STUDENT stu30; STUDENT *pt; pt = stu; 等价于等价于等价于等价于ptstu30stu0stu1stu2stu3stu4stu5.stu29第28页/共60页第二十八页,编辑于星期五:十六点 十五分。p
11、tstu30stu0stu1stu2stu3stu4stu5.stu29第29页/共60页第二十九页,编辑于星期五:十六点 十五分。12.5向函数传递结构体 向函数传递结构体的单个成员 复制单个成员的内容 函数内对结构内容的修改不影响原结构 向函数传递结构体的完整结构 向函数传递结构体的首地址第30页/共60页第三十页,编辑于星期五:十六点 十五分。struct date int year; int month; int day;void Func(struct date p) p.year = 2000; p.month = 5; p.day = 22;第31页/共60页第三十一页,编辑于星
12、期五:十六点 十五分。struct date int year; int month; int day;void Func(struct date ) year = 2000; month = 5; day = 22;指针作函数形参指针作函数形参实参必须为地址值实参必须为地址值第32页/共60页第三十二页,编辑于星期五:十六点 十五分。struct date int year; int month; int day; Func(struct date ) year = 2000; month = 5; day = 22; 第33页/共60页第三十三页,编辑于星期五:十六点 十五分。12.5向函
13、数传递结构体 向函数传递结构体的完整结构 复制整个结构体成员的内容,多个值 函数内对结构内容的修改不影响原结构 内容传递更直观,但开销大 向函数传递结构体的首地址 用结构体数组/结构体指针作函数参数 仅复制结构体的首地址,一个值 修改结构体指针所指向的结构体的内容 指针传递效率高第34页/共60页第三十四页,编辑于星期五:十六点 十五分。12.5向函数传递结构体 【例12.7】修改例12.3程序,用结构体数组作函数参数编程并输出计算学生的平均分 第35页/共60页第三十五页,编辑于星期五:十六点 十五分。12.5向函数传递结构体 【例12.7】修改例12.3程序,用结构体数组作函数参数编程并输
14、出计算学生的平均分 第36页/共60页第三十六页,编辑于星期五:十六点 十五分。12.5向函数传递结构体 【例12.7】修改例12.3程序,用结构体数组作函数参数编程并输出计算学生的平均分 第37页/共60页第三十七页,编辑于星期五:十六点 十五分。12.5向函数传递结构体 【例12.7】修改例12.3程序,用结构体数组作函数参数,编程并输出计算学生的平均分 第38页/共60页第三十八页,编辑于星期五:十六点 十五分。用户自定义的数据类型 结构体(Struct) 把关系紧密且逻辑相关的多种不同类型的变量,组织到统一的名字之下 占用相邻的一段内存单元 共用体,也称联合(Union) 把情形互斥但
15、逻辑相关的多种不同类型的变量,组织到统一的名字之下 占用同一段内存单元,每一时刻只有一个数据起作用第39页/共60页第三十九页,编辑于星期五:十六点 十五分。12.6共用体0 x0037b00第40页/共60页第四十页,编辑于星期五:十六点 十五分。12.6共用体 sizeof(union number)取决于的那个成员变量0 x0037b00同一内存单元在每一瞬时只能存放其中一种类型的成员起作用的成员是的成员,不能作为函数参数不能进行比较操作,只能对第一个成员初始化第41页/共60页第四十一页,编辑于星期五:十六点 十五分。第42页/共60页第四十二页,编辑于星期五:十六点 十五分。第43页
16、/共60页第四十三页,编辑于星期五:十六点 十五分。12.7 枚举数据类型 枚举(Enumeration)数据类型 描述的是一组整型值的集合 用于当某些量仅由有限个数据值组成时 enum weeks SUN, MON, TUE, WED, THU, FRI, SAT; enum weeks today; enum response no, yes, none; enum response answer; today = TUE; answer = yes; enum response no = -1, yes = 1, none = 0; 其值为其值为2 2其值为其值为1 1第44页/共60页
17、第四十四页,编辑于星期五:十六点 十五分。 下面的结构是什么意思? struct temp int data; struct temp pt; CB下的错误提示: field pt has incomplete type VC下的错误提示: pt uses undefined struct temp 下面的结构是什么意思呢? struct temp int data; struct temp *pt;结构体声明时不能包含本结结构体声明时不能包含本结构体类型成员,构体类型成员,系统将无法系统将无法为这样的结构体类型分配内为这样的结构体类型分配内存存 可包含指向本结构体可包含指向本结构体类型的指针
18、变量类型的指针变量第45页/共60页第四十五页,编辑于星期五:十六点 十五分。12.8 动态数据结构 单向链表struct Link int data; struct Link *next;datanextheaddatanextdatanextdataNULL第46页/共60页第四十六页,编辑于星期五:十六点 十五分。链表的定义datanextheaddatanextdatanextdataNULL两部分信息组成两部分信息组成一个节点一个节点第47页/共60页第四十七页,编辑于星期五:十六点 十五分。datanextheaddatanextdatanextdataNULL数据域:存储数据元数
19、据域:存储数据元素信息素信息指针域:存储直接指针域:存储直接后继的节点信息后继的节点信息n个节点链接成一个链表(因为只包含一个指针域,故又个节点链接成一个链表(因为只包含一个指针域,故又称线性链表或单向链表)称线性链表或单向链表)第48页/共60页第四十八页,编辑于星期五:十六点 十五分。链表的建立 向链表中添加一个新节点data = Anodedata = Bnodedata = Cnodehead第49页/共60页第四十九页,编辑于星期五:十六点 十五分。链表的建立 若原链表为空表(head = NULL) ,则将新建节点p置为头节点 headdatanext p(2) pr = ppr(
20、3) pr-next = NULL第50页/共60页第五十页,编辑于星期五:十六点 十五分。datanextp链表的建立 若原链表为非空,则将新建节点p添加到表尾 (2) pr = pheaddataprpr(3) pr-next = NULLnext第51页/共60页第五十一页,编辑于星期五:十六点 十五分。链表的删除操作 若原链表为空表,则退出程序 若待删除节点p是头节点,则将head指向当前节点的下一个节点即可删除当前节点 datanextheaddatanext p第52页/共60页第五十二页,编辑于星期五:十六点 十五分。链表的删除操作 若待删除节点不是头节点,则将前一节点的指针域指向当前节点的下一节点即可删除当
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 个人住宅建筑钢结构施工合同范本
- XXX生物制品有限公司经销商合同样板
- 事实婚姻离婚合同模板
- 临时劳务合同协议
- 中外合资经营企业合同范本(电子产品)
- 个人连带责任保证借款合同范本
- 产品合作开发合同模板
- 不服股权转让合同仲裁(裁决)起诉状范本
- 专业店铺转让合同文本
- 专利权共有合同模板
- 绿色能源项目融资计划书范文
- 《造血干细胞移植护理》课件
- 课题申报参考:全龄友好视角下的社区语言景观评估及空间优化研究
- 中央2025年公安部部分直属事业单位招聘84人笔试历年参考题库附带答案详解
- 五年级下册语文四大名著常考知识点
- 光伏发电项目施工组织设计方案及技术措施
- 2025年1月日历表(含农历-周数-方便记事备忘)
- 《人工智能发展史》课件
- 2024年同等学力人员申请硕士学位英语试卷与参考答案
- 小学一年级数学20以内的口算题(可直接打印A4)
- 中医针灸穴位现代研究
评论
0/150
提交评论