第8章_结构体与共用体.ppt
《第8章_结构体与共用体.ppt》由会员分享,可在线阅读,更多相关《第8章_结构体与共用体.ppt(47页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第8 8章章 结构体与共用体结构体与共用体章节:章节:节:节:Slide:8-1问题:问题:第第8 8章章 结构体与共用体结构体与共用体2010年年2月月哈尔滨工业大学计算机学院哈尔滨工业大学计算机学院第第8 8章章 结构体与共用体结构体与共用体章节:章节:节:节:Slide:8-2问题:问题:本章内容本章内容 结构体(结构结构体(结构结构体(结构结构体(结构structurestructure)、共用体(联合、共用体(联合、共用体(联合、共用体(联合unionunion)类型的定义类型的定义类型的定义类型的定义 结构体变量、结构体数组结构体变量、结构体数组结构体变量、结构体数组结构体变量、
2、结构体数组 结构体数组与指针结构体数组与指针结构体数组与指针结构体数组与指针第第8 8章章 结构体与共用体结构体与共用体章节:章节:节:节:Slide:8-3问题:问题:第第8 8章章 结构体与共用体结构体与共用体8.1 8.1 问题提出问题提出8.2 8.2 结构体结构体8.3 8.3 结构体数组结构体数组8.4 8.4 结构体与函数结构体与函数8.5 8.5 动态数据结构动态数据结构8.6 8.6 共共用体用体第第8 8章章 结构体与共用体结构体与共用体章节:章节:节:节:Slide:8-4问题:问题:从基本数据类型到抽象数据类型从基本数据类型到抽象数据类型 二进制数二进制数二进制数二进制
3、数在早期的机器指令及汇编语言中,数据对象均用二进制数表示,没有类型在早期的机器指令及汇编语言中,数据对象均用二进制数表示,没有类型在早期的机器指令及汇编语言中,数据对象均用二进制数表示,没有类型在早期的机器指令及汇编语言中,数据对象均用二进制数表示,没有类型的概念的概念的概念的概念 基本数据类型基本数据类型基本数据类型基本数据类型在高级语言中引入了基本数据类型:整型、实型、字符型等在高级语言中引入了基本数据类型:整型、实型、字符型等在高级语言中引入了基本数据类型:整型、实型、字符型等在高级语言中引入了基本数据类型:整型、实型、字符型等基本数据类型不能方便的解决所有问题,有些语言(如基本数据类型
4、不能方便的解决所有问题,有些语言(如基本数据类型不能方便的解决所有问题,有些语言(如基本数据类型不能方便的解决所有问题,有些语言(如PL/1PL/1PL/1PL/1)中试图规定)中试图规定)中试图规定)中试图规定较多的类型,如数组、树、栈等,但实践证明不是个好办法较多的类型,如数组、树、栈等,但实践证明不是个好办法较多的类型,如数组、树、栈等,但实践证明不是个好办法较多的类型,如数组、树、栈等,但实践证明不是个好办法 用户自己构造数据类型用户自己构造数据类型用户自己构造数据类型用户自己构造数据类型-复合数据类型复合数据类型复合数据类型复合数据类型表示复杂的数据对象,典型的代表就是表示复杂的数据
5、对象,典型的代表就是表示复杂的数据对象,典型的代表就是表示复杂的数据对象,典型的代表就是“结构体结构体结构体结构体”,数组、指针也可算作数组、指针也可算作数组、指针也可算作数组、指针也可算作此类此类此类此类 抽象数据类型(抽象数据类型(抽象数据类型(抽象数据类型(Abstract Data TypeAbstract Data TypeAbstract Data TypeAbstract Data Type,简称,简称,简称,简称ADTADTADTADT)在复合数据类型基础上增加了对数据的操作在复合数据类型基础上增加了对数据的操作在复合数据类型基础上增加了对数据的操作在复合数据类型基础上增加了对
6、数据的操作类类类类跨时代的进步跨时代的进步跨时代的进步跨时代的进步例如汽车就是一种例如汽车就是一种例如汽车就是一种例如汽车就是一种ADTADTADTADT第第8 8章章 结构体与共用体结构体与共用体章节:章节:节:节:Slide:8-5问题:问题:思考一个问题思考一个问题 在程序里表示一个人(姓名、年龄、性别、在程序里表示一个人(姓名、年龄、性别、在程序里表示一个人(姓名、年龄、性别、在程序里表示一个人(姓名、年龄、性别、),),),),怎么表示?怎么表示?怎么表示?怎么表示?想表示多个人呢?想表示多个人呢?想表示多个人呢?想表示多个人呢?如何用计算机程序实现下述表格的管理?如何用计算机程序实
7、现下述表格的管理?如何用计算机程序实现下述表格的管理?如何用计算机程序实现下述表格的管理?表表8-1 8-1 某学校学生成绩管理表某学校学生成绩管理表学号学号姓名姓名性别性别入学时间入学时间计算机原理计算机原理英英 语语数数 学学音音 乐乐1令狐冲男1999908372822林平之男1999789288783岳灵珊女1999897298664任莹莹女1999789587905 6 8.1 8.1 问题提出问题提出第第8 8章章 结构体与共用体结构体与共用体章节:章节:节:节:Slide:8-6问题:问题:intint studentId30;studentId30;/*/*每个学生的学号每个学
8、生的学号*/charchar studentName3010;studentName3010;/*/*每个学生的每个学生的姓名姓名*/charchar studentSex302;studentSex302;/*/*每个学生的每个学生的性别性别*/intint timeOfEnter30;timeOfEnter30;/*/*入学时间用入学时间用intint表示表示*/intint scoreComputer30;scoreComputer30;/*/*计算机原理课的成绩计算机原理课的成绩*/intint scoreEnglish30;scoreEnglish30;/*/*英语课的成绩英语课的成
9、绩*/intint scoreMath30;scoreMath30;/*/*数学课的成绩数学课的成绩*/intint scoreMusic30;scoreMusic30;/*/*音乐课的成绩音乐课的成绩*/数组解决方法数组解决方法(1)(1)8.1 8.1 问题提出问题提出第第8 8章章 结构体与共用体结构体与共用体章节:章节:节:节:Slide:8-7问题:问题:数组解决方法数组解决方法(2)(2)intint studentId30=1,2,3,4,5,6;studentId30=1,2,3,4,5,6;charchar studentName3010=studentName3010=令狐
10、冲令狐冲,林平之林平之,岳灵珊岳灵珊,任莹莹任莹莹;charchar studentSex302=studentSex302=男男,男男,女女,女女;intint 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,9
11、8,87;scoreMath30=72,88,98,87;intint scoreMusic30=82,78,66,90;scoreMusic30=82,78,66,90;8.1 8.1 问题提出问题提出第第8 8章章 结构体与共用体结构体与共用体章节:章节:节:节:Slide:8-8问题:问题:数组解决方法数组解决方法(3)(3)数据的内存管理方式数据的内存管理方式数据的内存管理方式数据的内存管理方式 907889788392729572889887827866901234令狐冲林平之岳灵珊任莹莹男男女女19991999199919998.1 8.1 问题提出问题提出第第8 8章章 结构体与
12、共用体结构体与共用体章节:章节:节:节:Slide:8-9问题:问题:数组解决方法分配内存不集中,寻址效率不高分配内存不集中,寻址效率不高 对数组进行赋初值时,容易发生错位对数组进行赋初值时,容易发生错位 结构显得比较零散,不容易管理结构显得比较零散,不容易管理 8.1 8.1 问题提出问题提出第第8 8章章 结构体与共用体结构体与共用体章节:章节:节:节:Slide:8-10问题:问题:希望的内存分配图 1令狐冲男1999908372822林平之男1999789288783岳灵珊女1999897298664任莹莹女1999789587908.1 8.1 问题提出问题提出第第8 8章章 结构体
13、与共用体结构体与共用体章节:章节:节:节:Slide:8-11问题:问题:结构体的解决方法structstruct STUDENTSTUDENT intint number;number;/*/*每个学生的学号每个学生的学号*/charchar name10;name10;/*/*每个学生的姓名每个学生的姓名*/charchar sex4;sex4;/*/*每个学生的性别每个学生的性别*/intint enter;enter;/*/*每个学生的入学时间每个学生的入学时间*/intintcomputer;computer;/*/*每个学生的计算机原理成绩每个学生的计算机原理成绩*/intinte
14、nglishenglish;/*/*每个学生的英语成绩每个学生的英语成绩*/intintmath;math;/*/*每个学生的数学成绩每个学生的数学成绩*/intintmusic;music;/*/*每个学生的音乐成绩每个学生的音乐成绩*/;structstruct STUDENTSTUDENT 是一个类型是一个类型structstruct STUDENT STUDENT studentstudent;structstruct STUDENTSTUDENT students4;students4;8.1 8.1 问题提出问题提出第第8 8章章 结构体与共用体结构体与共用体章节:章节:节:节:S
15、lide:8-12问题:问题:第8章 结构体与共用体8.1 8.1 问题提出问题提出8.2 8.2 结构体结构体8.3 8.3 结构体数组结构体数组8.4 8.4 结构体与函数结构体与函数8.5 8.5 动态数据结构动态数据结构8.6 8.6 共用体共用体第第8 8章章 结构体与共用体结构体与共用体章节:章节:节:节:Slide:8-13问题:问题:用户自定义的数据类型 结构体结构体把关系紧密且逻辑相关的多种不同类型的变量组织到统把关系紧密且逻辑相关的多种不同类型的变量组织到统一的名字之下,也称复合数据类型一的名字之下,也称复合数据类型这种类型的变量占用相邻的一段内存单元这种类型的变量占用相邻
16、的一段内存单元 共用体共用体把情形互斥但又逻辑相关的多种不同类型的变量组织在把情形互斥但又逻辑相关的多种不同类型的变量组织在一起一起这种类型的变量占用同一段内存单元,因此每一时刻只这种类型的变量占用同一段内存单元,因此每一时刻只有一个数据起作用有一个数据起作用8.2 8.2 结构体结构体第第8 8章章 结构体与共用体结构体与共用体章节:章节:节:节:Slide:8-14问题:问题:structstruct student student intint num;num;charchar name20;name20;charchar sex;sex;intint age;age;floatfloa
17、t score;score;charchar addr30;addr30;结构体定义结构体定义structstruct 结构体名结构体名 类型关键字类型关键字 成员名成员名1 1;类型关键字类型关键字 成员名成员名2 2;.类型关键字类型关键字 成员名成员名n n;;结构体的定义只定义了数据的形结构体的定义只定义了数据的形式,即声明了一种复杂的数据类式,即声明了一种复杂的数据类型,并未生成任何变量。型,并未生成任何变量。numnamesexagescoreaddrstructure definitionstructure definitionstructure definitionstruct
18、ure definition形成一个样板,用于生成结构体变量形成一个样板,用于生成结构体变量形成一个样板,用于生成结构体变量形成一个样板,用于生成结构体变量结构体的定义8.2 8.2 结构体结构体第第8 8章章 结构体与共用体结构体与共用体章节:章节:节:节:Slide:8-15问题:问题:先定义结构体类型再定义变量名先定义结构体类型再定义变量名在定义类型的同时定义变量在定义类型的同时定义变量直接定义结构体变量(不出现结构体名)直接定义结构体变量(不出现结构体名)struct student student1,student2;structstruct studentstudent intin
19、t num;num;char char name20;name20;char char sex;sex;intint age;age;float float score;score;char char addr30;addr30;student1,student2;student1,student2;structstruct intint num;num;char char name20;name20;charchar sex;sex;intint age;age;float float score;score;char char addr30;addr30;student1,student2
20、;student1,student2;结构体变量的定义(1)8.2 8.2 结构体结构体第第8 8章章 结构体与共用体结构体与共用体章节:章节:节:节:Slide:8-16问题:问题:用用typedeftypedef为已存在的类型定义新名字为已存在的类型定义新名字结构体变量的定义(2)structstruct studentstudent intint num;num;charchar name20;name20;charchar sex;sex;intint age;age;floatfloat score;score;charchar addr30;addr30;typedeftypede
21、f structstruct studentstudent STUD;STUD;STUDSTUD student1,student2;student1,student2;用用STUDSTUD代替代替 structstruct studentstudent类型类型8.2 8.2 结构体结构体第第8 8章章 结构体与共用体结构体与共用体章节:章节:节:节:Slide:8-17问题:问题:结构体定义可以嵌套结构体定义可以嵌套结构体定义可以嵌套结构体定义可以嵌套结构体变量的定义(3)学号学号学号学号姓名姓名姓名姓名性别性别性别性别年龄年龄年龄年龄出生年月出生年月出生年月出生年月住址住址住址住址年年年年
22、月月月月日日日日structstructstructstruct studentstudent intintintint num;num;charcharcharchar name20;name20;charcharcharchar sex;sex;intintintint age;age;structstructstructstruct datadata birthday;birthday;charcharcharchar addr30;addr30;student1,student2 student1,student2;structstruct datedate intint year;y
23、ear;intint month;month;intint day;day;typedeftypedeftypedeftypedef structstructstructstruct datedate DATEDATE;DATEDATE birthday;birthday;8.2 8.2 结构体结构体第第8 8章章 结构体与共用体结构体与共用体章节:章节:节:节:Slide:8-18问题:问题:结构体(Structure)的内存占用 一个结构体变量的成员在内存中是相邻的一个结构体变量的成员在内存中是相邻的一个结构体变量的成员在内存中是相邻的一个结构体变量的成员在内存中是相邻的 整个结构的变量将
24、占用多少内存呢?整个结构的变量将占用多少内存呢?整个结构的变量将占用多少内存呢?整个结构的变量将占用多少内存呢?是所有成员变量的内存总和吗?是所有成员变量的内存总和吗?是所有成员变量的内存总和吗?是所有成员变量的内存总和吗?我们可以用我们可以用我们可以用我们可以用sizeofsizeof来获得结构的大小来获得结构的大小来获得结构的大小来获得结构的大小structstruct studentstudent intint num;num;char char name20;name20;char char sex;sex;intint age;age;float float score;score;
25、char char addr30;addr30;student1,student2;student1,student2;student1student1student2student2成员变量成员变量是相邻的是相邻的8.2 8.2 结构体结构体第第8 8章章 结构体与共用体结构体与共用体章节:章节:节:节:Slide:8-19问题:问题:结构体成员的访问 structstructstructstruct point point point point intintintint x;x;x;x;intintintint y;y;y;y;structstructstructstruct point
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 结构 共用
限制150内