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