




已阅读5页,还剩23页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第8章结构体与共用体 C语言大学实用教程 2005年8月 哈尔滨工业大学计算机学院 guoping 本章内容 结构体 结构structure 共用体 联合union 类型的定义结构体变量 结构体数组结构体数组与指针 从基本数据类型到抽象数据类型 二进制数在早期的机器指令及汇编语言中 数据对象均用二进制数表示 没有类型的概念基本数据类型在高级语言中引入了基本数据类型 整型 实型 字符型等基本数据类型不能方便的解决所有问题 有些语言 如PL 1 中试图规定较多的类型 如数组 树 栈等 但实践证明不是个好办法用户自己构造数据类型 复合数据类型表示复杂的数据对象 典型的代表就是 结构体 数组 指针也可算作此类抽象数据类型 AbstractDataType 简称ADT 在复合数据类型基础上增加了对数据的操作类 跨时代的进步例如汽车就是一种ADT 思考一个问题 在程序里表示一个人 姓名 年龄 性别 怎么表示 想表示多个人呢 如何用计算机程序实现下述表格的管理 表8 1某学校学生成绩管理表 intstudentId 30 每个学生的学号 charstudentName 10 30 每个学生的学号 charstudentSex 2 30 每个学生的学号 inttimeOfEnter 30 入学时间用int表示 intscoreComputer 30 计算机原理课的成绩 intscoreEnglish 30 英语课的成绩 intscoreMath 30 数学课的成绩 intscoreMusic 30 音乐课的成绩 数组解决方法 1 数组解决方法 2 intstudentId 30 1 2 3 4 5 6 charstudentName 10 30 令狐冲 林平之 岳灵珊 任莹莹 charstudentSex 2 30 男 男 女 女 inttimeOfEnter 30 1999 1999 1999 1999 intscoreComputer 30 90 78 89 78 intscoreEnglish 30 83 92 72 95 intscoreMath 30 72 88 98 87 intscoreMusic 30 82 78 66 90 数组解决方法 3 数据的内存管理方式 数组解决方法 分配内存不集中 寻址效率不高对数组进行赋初值时 容易发生错位结构显得比较零散 不容易管理 希望的内存分配图 结构体的解决方法 structSTUDENT intstudentID 每个学生的序号 charstudentName 10 每个学生的姓名 charstudentSex 4 每个学生的性别 inttimeOfEnter 每个学生的入学时间 intscoreComputer 每个学生的计算机原理成绩 intscoreEnglish 每个学生的英语成绩 intscoreMath 每个学生的数学成绩 intscoreMusic 每个学生的音乐成绩 structSTUDENT是一个类型structSTUDENTstudents 4 students 0 studentNamestudents 0 Sex它们都是变量 一般称为结构的成员变量 用户自定义的数据类型 结构体把关系紧密且逻辑相关的多种不同类型的变量组织到统一的名字之下 也称复合数据类型这种类型的变量占用相邻的一段内存单元共用体把情形互斥但又逻辑相关的多种不同类型的变量组织在一起这种类型的变量占用同一段内存单元 因此每一时刻只有一个数据起作用 structstudent intnum charname 20 charsex intage floatscore charaddr 30 结构体定义 struct结构体名 类型关键字成员名1 类型关键字成员名2 类型关键字成员名n 结构体的定义只定义了数据的形式 即声明了一种复杂的数据类型 并未生成任何变量 结构体的定义 structuredefinition形成一个样板 用于生成结构体变量 先定义结构体类型再定义变量名 在定义类型的同时定义变量 直接定义结构体变量 不出现结构体名 structstudentstudent1 student2 structstudent intnum charname 20 charsex intage floatscore charaddr 30 student1 student2 struct intnum charname 20 charsex intage floatscore charaddr 30 student1 student2 结构体变量的定义 1 用typedef为已存在的类型定义新名字 结构体变量的定义 2 structstudent intnum charname 20 charsex intage floatscore charaddr 30 typedefstructstudentSTUD STUDstudent1 student2 用STUD代替structstudent类型 结构体定义可以嵌套 结构体变量的定义 3 structstudent intnum charname 20 charsex intage structdatabirthday charaddr 30 student1 student2 structdate intyear intmonth intday typedefstructdateDATE DATEbirthday 结构 Structure 的内存占用 一个结构变量的成员变量在内存中是相邻的整个结构的变量将占用多少内存呢 是所有成员变量的内存总和吗 我们可以用sizeof来获得结构的大小 structstudent intnum charname 20 charsex intage floatscore charaddr 30 student1 student2 student1 student2 成员变量是相邻的 结构体成员的访问 structpoint intx inty structpointpt 定义结构体变量 structpoint ppt 定义结构体指针 ppt 指向运算符 ppt pt structSTUDENT intstudentID charstudentName 10 charstudentSex 4 structdatetimeOfEnter intscoreComputer intscoreEnglish intscoreMath intscoreMusic 结构体数组定义 structSTUDENTstu 30 stu 0 stu 1 stu 2 structSTUDENT intstudentID charstudentName 10 charstudentSex 4 structdatetimeOfEnter intscoreComputer intscoreEnglish intscoreMath intscoreMusic structSTUDENTstu 30 1 令狐冲 男 1999 12 20 90 83 72 82 2 林平之 男 1999 07 06 78 92 88 78 3 岳灵珊 女 1999 07 06 89 72 98 66 4 任莹莹 女 1999 07 06 78 95 87 90 结构体数组初始化 结构体数组的指针 structSTUDENTstu 30 structSTUDENT pt pt stu stu 0 stu 1 stu 2 pt pt stu 3 例8 1利用指向结构体数组的指针计算学生各科的平均成绩 includestructdate intyear intmonth intday structSTUDENT intstudentID charstudentName 10 charstudentSex 4 structdatetimeOfEnter intscoreComputer intscoreEnglish intscoreMath intscoreMusic structSTUDENTstu 30 1 令狐冲 男 1999 12 20 90 83 72 82 2 林平之 男 1999 07 06 78 92 88 78 3 岳灵珊 女 1999 07 06 89 72 98 66 4 任莹莹 女 1999 07 06 78 95 87 90 main structSTUDENT pt floatsum 4 0 0 average 4 0 0 inti char name computer english math music pt stu for ptscoreComputer sum 1 sum 1 pt scoreEnglish sum 2 sum 2 pt scoreMath sum 3 sum 3 pt scoreMusic for i 0 i 4 i avergae i sum i 4 printf 20s 4 2f n name i average i 例8 2 main structSTUDENT pt floatsum 4 0 0 average 4 0 0 inti char name scoreofComputer scoreofEnglish scoreofMath scoreofMusic pt stu pt指向结构体数组的第一个元素 for pt stu ptscoreComputer sum 1 sum 1 pt scoreEnglish sum 2 sum 2 pt scoreMath sum 3 sum 3 pt scoreMusic for i 0 i 4 i average i sum i 4 printf 20s 4 2f n name i average i 结构体与函数 向函数传递结构体的单个成员单向值传递 函数内对结构内容的修改不影响原结构向函数传递结构体的完整结构单向值传递 函数内对结构内容的修改不影响原结构 开销大向函数传递结构体的首地址用结构体数组或者结构体指针做函数参数除提高效率外 还可以修改结构体指针所指向的结构体的内容 共用体 或称为联合 Union unionnumber shortx charch floaty 基本上和struct一样x ch和y处于同样的地址sizeof unionxxx 取决于占空间最多的那个成员变量 共用体的特点 同一内存单元在每一瞬时只能存放其中
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 平阳2024数学试卷
- 毕业论文项目管理
- 师范类专业毕业论文怎么写
- 二零二五年度离婚纠纷调解协议书撰写指导手册
- 2025年城市公交校车租赁及定期车辆检查保养合作协议
- 2025年度环保型柴油节能减排合作协议范本
- 2025年办公楼改造工程安全文明施工及智能化设施质量控制合同
- 粽子毕业论文设计
- 2025年智能化商业综合体设施设备维保与绿化养护服务合同
- 2025年古镇风情商业街升级改造装修施工合作协议
- (正确)新入场人员一级安全教育考试试卷(含答案)
- 2024年10月成都市金牛区人民政府西华街道办事处公开招考1名编外人员笔试历年典型考题(历年真题考点)解题思路附带答案详解
- 2025年牙医资格证技能试题及答案
- 初中道德与法治跨学科项目化学习的设计与实施讲座提纲
- DG-TG08-12-2024 普通中小学建设标准
- 《物业管理培训课件:业主满意度提升策略》
- 2025船舶抵押合同范本
- 金融标准化知识培训课件
- 2024年医销售药销售工作总结
- 2025年中国茯苓种植市场全面调研及行业投资潜力预测报告
- 医师规范化培训
评论
0/150
提交评论