第七章 结构体与共用体.ppt
《第七章 结构体与共用体.ppt》由会员分享,可在线阅读,更多相关《第七章 结构体与共用体.ppt(62页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、2023/1/24C语言大学实用教程课件 制作人 苏小红1本章内容本章内容本章内容本章内容 结构体(结构结构体(结构结构体(结构结构体(结构structurestructure)、共用体(联合、共用体(联合、共用体(联合、共用体(联合unionunion)类型的定义类型的定义类型的定义类型的定义 结构体变量、结构体数组结构体变量、结构体数组结构体变量、结构体数组结构体变量、结构体数组 结构体变量、结构体数组与指针、函数的关系结构体变量、结构体数组与指针、函数的关系结构体变量、结构体数组与指针、函数的关系结构体变量、结构体数组与指针、函数的关系 用结构体实现动态数据结构用结构体实现动态数据结构用
2、结构体实现动态数据结构用结构体实现动态数据结构 链表的概念及操作原理链表的概念及操作原理链表的概念及操作原理链表的概念及操作原理 2023/1/24C语言大学实用教程课件 制作人 苏小红2从基本数据类型到抽象数据类型从基本数据类型到抽象数据类型从基本数据类型到抽象数据类型从基本数据类型到抽象数据类型 二进制数二进制数 在早期的机器指令及汇编语言中,数据对象均用二进制数表示,在早期的机器指令及汇编语言中,数据对象均用二进制数表示,在早期的机器指令及汇编语言中,数据对象均用二进制数表示,在早期的机器指令及汇编语言中,数据对象均用二进制数表示,没有类型的概念没有类型的概念没有类型的概念没有类型的概念
3、 基本数据类型基本数据类型在高级语言中引入了基本数据类型:整型、实型、字符型等在高级语言中引入了基本数据类型:整型、实型、字符型等在高级语言中引入了基本数据类型:整型、实型、字符型等在高级语言中引入了基本数据类型:整型、实型、字符型等基本数据类型不能方便的解决所有问题,有些语言(如基本数据类型不能方便的解决所有问题,有些语言(如基本数据类型不能方便的解决所有问题,有些语言(如基本数据类型不能方便的解决所有问题,有些语言(如PL/1PL/1PL/1PL/1)中)中)中)中试图规定较多的类型,如数组、树、栈等,但实践证明不是个好试图规定较多的类型,如数组、树、栈等,但实践证明不是个好试图规定较多的
4、类型,如数组、树、栈等,但实践证明不是个好试图规定较多的类型,如数组、树、栈等,但实践证明不是个好办法办法办法办法 用户自己用户自己构造数据类型构造数据类型-复合数据类型复合数据类型表示复杂的数据对象,典型的代表就是表示复杂的数据对象,典型的代表就是表示复杂的数据对象,典型的代表就是表示复杂的数据对象,典型的代表就是“结构体结构体结构体结构体”,数组、指针数组、指针数组、指针数组、指针也可算作此类也可算作此类也可算作此类也可算作此类 抽象数据类型抽象数据类型(Abstract Data TypeAbstract Data TypeAbstract Data TypeAbstract Data
5、Type,简称,简称,简称,简称ADTADTADTADT)在复合数据类型基础上增加了对数据的操作在复合数据类型基础上增加了对数据的操作在复合数据类型基础上增加了对数据的操作在复合数据类型基础上增加了对数据的操作类类类类跨时代的进步跨时代的进步跨时代的进步跨时代的进步例如汽车就是一种例如汽车就是一种例如汽车就是一种例如汽车就是一种ADTADTADTADT2023/1/24C语言大学实用教程课件 制作人 苏小红3思考一个问题思考一个问题思考一个问题思考一个问题 在程序里表示一个人(姓名、年龄、性别、在程序里表示一个人(姓名、年龄、性别、在程序里表示一个人(姓名、年龄、性别、在程序里表示一个人(姓名
6、、年龄、性别、),),),),怎么表示?怎么表示?怎么表示?怎么表示?想表示多个人呢?想表示多个人呢?想表示多个人呢?想表示多个人呢?如何用计算机程序实现下述表格的管理?如何用计算机程序实现下述表格的管理?如何用计算机程序实现下述表格的管理?如何用计算机程序实现下述表格的管理?表8-1 某学校学生成绩管理表学号学号姓名姓名性别性别入学时间入学时间计算机原理计算机原理英英 语语数数 学学音音 乐乐1令狐冲男1999908372822林平之男1999789288783岳灵珊女1999897298664任莹莹女1999789587905 6 2023/1/24C语言大学实用教程课件 制作人 苏小红4
7、数组的解决方法数组的解决方法数组的解决方法数组的解决方法int int studentId30;studentId30;/*/*最多可以管理最多可以管理最多可以管理最多可以管理3030个学生个学生个学生个学生,每个每个每个每个学生的学号用数组的下标表示学生的学号用数组的下标表示学生的学号用数组的下标表示学生的学号用数组的下标表示*/charchar studentName1030;studentName1030;charchar studentSex230;studentSex230;int int timeOfEnter30;timeOfEnter30;/*/*入学时间用入学时间用入学时间用
8、入学时间用intint表示表示表示表示*/int int scoreComputer30;scoreComputer30;/*/*计算机原理课的成绩计算机原理课的成绩计算机原理课的成绩计算机原理课的成绩*/int int scoreEnglish30;scoreEnglish30;/*/*英语课的成绩英语课的成绩英语课的成绩英语课的成绩*/int int scoreMath30;scoreMath30;/*/*数学课的成绩数学课的成绩数学课的成绩数学课的成绩*/int int scoreMusic30;scoreMusic30;/*/*音乐课的成绩音乐课的成绩音乐课的成绩音乐课的成绩*/202
9、3/1/24C语言大学实用教程课件 制作人 苏小红5数组的解决方法数组的解决方法数组的解决方法数组的解决方法intint studentId30=1,2,3,4,5,6;studentId30=1,2,3,4,5,6;charcharstudentName1030=studentName1030=令狐冲令狐冲令狐冲令狐冲,林平之林平之林平之林平之,岳灵珊岳灵珊岳灵珊岳灵珊,任莹莹任莹莹任莹莹任莹莹;charcharstudentSex230=studentSex230=男男男男,男男男男,女女女女,女女女女;intint timeOfEnter30=1999,1999,1999,1999;ti
10、meOfEnter30=1999,1999,1999,1999;intint scoreComputer30=90,78,89,78;scoreComputer30=90,78,89,78;intint scoreEnglish30=83,92,72,95;scoreEnglish30=83,92,72,95;intint scoreMath30=72,88,98,87;scoreMath30=72,88,98,87;intint scoreMusic30=82,78,66,90;scoreMusic30=82,78,66,90;2023/1/24C语言大学实用教程课件 制作人 苏小红6数组的
11、解决方法数组的解决方法数组的解决方法数组的解决方法 数据的内存管理方式数据的内存管理方式数据的内存管理方式数据的内存管理方式 907889788392729572889887827866901234令狐冲林平之岳灵珊任莹莹男男女女19991999199919992023/1/24C语言大学实用教程课件 制作人 苏小红7数组的解决方法数组的解决方法数组的解决方法数组的解决方法 分配内存不集中,寻址效率不高分配内存不集中,寻址效率不高分配内存不集中,寻址效率不高分配内存不集中,寻址效率不高 对数组进行赋初值时,容易发生错位对数组进行赋初值时,容易发生错位对数组进行赋初值时,容易发生错位对数组进行赋
12、初值时,容易发生错位 结构显得比较零散,不容易管理结构显得比较零散,不容易管理结构显得比较零散,不容易管理结构显得比较零散,不容易管理 2023/1/24C语言大学实用教程课件 制作人 苏小红8希望的内存分配图希望的内存分配图希望的内存分配图希望的内存分配图 1令狐冲男1999908372822林平之男1999789288783岳灵珊女1999897298664任莹莹女1999789587902023/1/24C语言大学实用教程课件 制作人 苏小红9结构体的解决方法结构体的解决方法结构体的解决方法结构体的解决方法 struct struct STUDENTSTUDENT int int stu
13、dentID;studentID;/*/*每个学生的序号每个学生的序号每个学生的序号每个学生的序号*/char char studentName10;studentName10;/*/*每个学生的姓名每个学生的姓名每个学生的姓名每个学生的姓名*/char char studentSex4;studentSex4;/*/*每个学生的性别每个学生的性别每个学生的性别每个学生的性别*/intinttimeOfEnter;timeOfEnter;/*/*每个学生的入学时间每个学生的入学时间每个学生的入学时间每个学生的入学时间*/intintscoreComputer;scoreComputer;/*/
14、*每个学生的计算机原理成绩每个学生的计算机原理成绩每个学生的计算机原理成绩每个学生的计算机原理成绩*/intintscoreEnglish;scoreEnglish;/*/*每个学生的英语成绩每个学生的英语成绩每个学生的英语成绩每个学生的英语成绩*/intintscoreMath;scoreMath;/*/*每个学生的数学成绩每个学生的数学成绩每个学生的数学成绩每个学生的数学成绩*/intintscoreMusic;scoreMusic;/*/*每个学生的音乐成绩每个学生的音乐成绩每个学生的音乐成绩每个学生的音乐成绩*/;structstruct STUDENTSTUDENT是一个类型是一个类
15、型是一个类型是一个类型 structstruct STUDENTSTUDENT students4;students4;students0.students0.studentNamestudentNamestudents0.Sexstudents0.Sex 它们都是变量,一般称为结构的成员变量它们都是变量,一般称为结构的成员变量它们都是变量,一般称为结构的成员变量它们都是变量,一般称为结构的成员变量2023/1/24C语言大学实用教程课件 制作人 苏小红10用户自定义的数据类型用户自定义的数据类型用户自定义的数据类型用户自定义的数据类型 结构体:结构体:结构体:结构体:把关系紧密且逻辑相关的多
16、种不同类型的变量组织到统把关系紧密且逻辑相关的多种不同类型的变量组织到统把关系紧密且逻辑相关的多种不同类型的变量组织到统把关系紧密且逻辑相关的多种不同类型的变量组织到统一的名字之下,也称复合数据类型一的名字之下,也称复合数据类型一的名字之下,也称复合数据类型一的名字之下,也称复合数据类型这种类型的变量占用相邻的一段内存单元这种类型的变量占用相邻的一段内存单元这种类型的变量占用相邻的一段内存单元这种类型的变量占用相邻的一段内存单元 共用体:共用体:共用体:共用体:把情形互斥但又逻辑相关的多种不同类型的变量组织在把情形互斥但又逻辑相关的多种不同类型的变量组织在把情形互斥但又逻辑相关的多种不同类型的
17、变量组织在把情形互斥但又逻辑相关的多种不同类型的变量组织在一起一起一起一起这种类型的变量占用同一段内存单元,因此每一时刻只这种类型的变量占用同一段内存单元,因此每一时刻只这种类型的变量占用同一段内存单元,因此每一时刻只这种类型的变量占用同一段内存单元,因此每一时刻只有一个数据起作用有一个数据起作用有一个数据起作用有一个数据起作用2023/1/24C语言大学实用教程课件 制作人 苏小红1110010LiFunM1887.5Beijingnumnamesexagescoreaddrstruct student int num;char name20;char sex;int age;float s
18、core;char addr30;structure definitionstructure definition形成一个样板,用于生成结构体变量。形成一个样板,用于生成结构体变量。形成一个样板,用于生成结构体变量。形成一个样板,用于生成结构体变量。一般形式:一般形式:struct 结构体名结构体名 类型关键字类型关键字 成员名成员名1 1;类型关键字类型关键字 成员名成员名2 2 .类型关键字类型关键字 成员名成员名n n;构成结构体的变量称为结构体的构成结构体的变量称为结构体的构成结构体的变量称为结构体的构成结构体的变量称为结构体的成员(成员(member),),也称也称也称也称元素元素(
19、element)或或或或域域(filed)结构体的定义只定义了数据的形式,结构体的定义只定义了数据的形式,结构体的定义只定义了数据的形式,结构体的定义只定义了数据的形式,即声明了一种复杂的数据类型,并未即声明了一种复杂的数据类型,并未即声明了一种复杂的数据类型,并未即声明了一种复杂的数据类型,并未生成任何变量。生成任何变量。生成任何变量。生成任何变量。结构体的定义结构体的定义结构体的定义结构体的定义2023/1/24C语言大学实用教程课件 制作人 苏小红12_先定义结构体类型再定义变量名先定义结构体类型再定义变量名_在定义类型的同时定义变量在定义类型的同时定义变量_直接定义结构体变量(不出现结
20、构体名)直接定义结构体变量(不出现结构体名)struct student student1,student2;structstruct student student intint num;num;charchar name20;name20;charchar sex;sex;intint age;age;floatfloat score;score;charchar addr30;addr30;student1,student2;student1,student2;structstruct int num;int num;charchar name20;name20;charchar sex
21、;sex;intint age;age;floatfloat score;score;charchar addr30;addr30;student1,student2;student1,student2;结构体变量的定义结构体变量的定义结构体变量的定义结构体变量的定义2023/1/24C语言大学实用教程课件 制作人 苏小红13结构体变量的定义结构体变量的定义结构体变量的定义结构体变量的定义 用用用用typedeftypedef为已存在的类型定义新名字为已存在的类型定义新名字为已存在的类型定义新名字为已存在的类型定义新名字structstruct studentstudent intint nu
22、m;num;charchar name20;name20;charchar sex;sex;intint age;age;floatfloat score;score;charchar addr30;addr30;typedeftypedef struct struct studentstudent STUD;STUD;STUDSTUD student1,student2;student1,student2;用用STUD代替代替 struct student类型类型;2023/1/24C语言大学实用教程课件 制作人 苏小红14结构体定义可以嵌套结构体定义可以嵌套structstruct dat
23、e intint month;intint day;intint year;typedef structtypedef struct date DATE;structstruct student intint num;charchar name20;charchar sex;intint age;DATE birthday;charchar addr30;student1,student2;num name sexagebirthdayaddrmonth dayyearstruct student 占用内存字节数占用内存字节数占用内存字节数占用内存字节数=?double 占用内存字节数占用内存
24、字节数占用内存字节数占用内存字节数 =8结构体变量的定义结构体变量的定义结构体变量的定义结构体变量的定义2023/1/24C语言大学实用教程课件 制作人 苏小红15结构(结构(结构(结构(StructureStructure)的内存占用)的内存占用)的内存占用)的内存占用 一个结构变量的成员变量在内存中是相邻的一个结构变量的成员变量在内存中是相邻的一个结构变量的成员变量在内存中是相邻的一个结构变量的成员变量在内存中是相邻的 整个结构变量的将占用多少内存呢?整个结构变量的将占用多少内存呢?整个结构变量的将占用多少内存呢?整个结构变量的将占用多少内存呢?是所有成员变量的内存总和吗?是所有成员变量的
25、内存总和吗?是所有成员变量的内存总和吗?是所有成员变量的内存总和吗?事实上,所有数据类型在内存中都是从偶数地址开始存放事实上,所有数据类型在内存中都是从偶数地址开始存放事实上,所有数据类型在内存中都是从偶数地址开始存放事实上,所有数据类型在内存中都是从偶数地址开始存放的,且结构所占的实际空间一般是按照机器字长对齐的的,且结构所占的实际空间一般是按照机器字长对齐的的,且结构所占的实际空间一般是按照机器字长对齐的的,且结构所占的实际空间一般是按照机器字长对齐的 不同的编译器、不同的平台,对齐方式会有变化,不过一般的编不同的编译器、不同的平台,对齐方式会有变化,不过一般的编不同的编译器、不同的平台,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第七章 结构体与共用体 第七 结构 共用
限制150内