C 程序设计教程 教学课件 ppt 作者 戴水贵 敖志刚 俞海英 编著 第8章 结构体和共用体

上传人:E**** 文档编号:89191010 上传时间:2019-05-21 格式:PPT 页数:36 大小:140KB
返回 下载 相关 举报
C 程序设计教程 教学课件 ppt 作者 戴水贵 敖志刚 俞海英 编著 第8章 结构体和共用体_第1页
第1页 / 共36页
C 程序设计教程 教学课件 ppt 作者 戴水贵 敖志刚 俞海英 编著 第8章 结构体和共用体_第2页
第2页 / 共36页
C 程序设计教程 教学课件 ppt 作者 戴水贵 敖志刚 俞海英 编著 第8章 结构体和共用体_第3页
第3页 / 共36页
C 程序设计教程 教学课件 ppt 作者 戴水贵 敖志刚 俞海英 编著 第8章 结构体和共用体_第4页
第4页 / 共36页
C 程序设计教程 教学课件 ppt 作者 戴水贵 敖志刚 俞海英 编著 第8章 结构体和共用体_第5页
第5页 / 共36页
点击查看更多>>
资源描述

《C 程序设计教程 教学课件 ppt 作者 戴水贵 敖志刚 俞海英 编著 第8章 结构体和共用体》由会员分享,可在线阅读,更多相关《C 程序设计教程 教学课件 ppt 作者 戴水贵 敖志刚 俞海英 编著 第8章 结构体和共用体(36页珍藏版)》请在金锄头文库上搜索。

1、第8章 结构体和共用体,结构体将不同类型的数据组合在一起,构成一种新的构造型数据(char、int、long、float和double等为基本型数据)。这种定义不仅仅是将不同类型的数据组合在一起,它给数据管理带来了极大的方便。 例如,学生成绩表如下图(图8-1)所示:,图8-1学生成绩表示意图,用普通方法将成绩表排序时,除交换成绩位置外,还要交换姓名的位置。引入结构体后,只要将整个结构体交换位置即可。 结构体的引入为C+中类结构体(简称类)的引入打下了基础。初学者应将这部分学好,这对理解C+中类的概念是很有帮助的。,8.1 结构体的定义,结构体的定义格式为: struct 结构体名 ; ; ;

2、 其中,类型可以是基本型或构造型,结构体名可以省略。例如: struct student int num; char name20; char sex; int age; float score; char addr30; ;,结构体名可以省略(无名结构体)。例如: struct int num; char name20; char sex; int age; float score; char addr30; ;,8.2结构体变量的定义,(1) 先定义结构体类型,再定义结构体变量: struct 结构体名 类型 成员名; 类型 成员名; ; struct 结构体名 变量名1, 变量名1,;

3、例如 struct student int num; char name20; char sex; int age; float score; char addr30; ; struct student stu1,stu2; /stu1.str2为结构体变量,(2) 定义结构体类型的同时定义结构体变量: struct 结构体名 类型 成员名; 类型 成员名; 变量名1变量名1,; 例如 struct student int num; char name20; char sex; int age; float score; char addr30; stu1,stu2; / stu1.str2为

4、结构体变量,(3) 定义无名结构体类型的同时定义结构体变量: struct 类型 成员名; 类型 成员名; 变量名1变量名1,; 例如 struct int num; char name20; char sex; int age; float score; char addr30; stu1,stu2; / stu1.str2为结构体变量 说明: 定义结构体时不占用内存,定义的结构体变量占用内存,程 序中用结构体变量使用结构体。,结构体可以嵌套定义,例如: struct date int month; int day; int year; ; struct student int num; c

5、har name20; struct date birthday; stu; 或 struct student int num; char name20; struct date int month; int day; int year; birthday; stu;,8.3 结构体变量的引用,结构体由很多不同类型的成员组成,因此,当要对结构 体中的成员进行操作时,要用下面的方式: 结构体变量名.成员名 当要将一个结构体变量的值(结构体中所有成员的 值),赋给另一个同类型的结构体变量时,可以象基本变量 那样操作,这给实际应用带来了很大方便。例如,在对学生 成绩表进行排序时,当平均成绩交换位置时

6、,与之对应的姓 名、学号和各科成绩都要交换位置。用结构体后,只要交换 结构体就可以了。,8.4结构体变量的初始化,方式一: struct 结构体名 类型 成员名; 类型 成员名; ; struct 结构体名 结构体变量= 初始数据 ;,例如: struct student int num; char name20; char sex; int age; char addr30; ; struct student stu1=1000,“王八一”,M,49, “南京东路120号”;,方式二: struct 结构体名 类型 成员名; 类型 成员名; 结构体变量= 初始数据 ;,例如: struct

7、student int num; char name20; char sex; int age; char addr30; stu1=1000,“王八一”,M,49, “南京东路120号”;,方式三: struct 类型 成员名; 类型 成员名; 结构体变量= 初始数据 ;,例如: struct int num; char name20; char sex; int age; char addr30; stu1=1000,“王八一”,M,49, “南京东路120号”;,8.5 结构体数组变量,基本数组变量的定义方法在数组一章已介绍过,例 如: int a10; /定义整型数组变量a0,a1,a

8、2,a9 float b10; /定义实型数组变量b0,b1,b2,b9 结构体数组变量的定义方法与基本数组变量的定义方 法类似,所不同的是,此时的类型为构造型(每个数组变 量都是一个结构体数据,即内含对应的数据成员)。 在本章结构体变量的定义一节中,我们已讲了结构体 变量定义的三种形式,只要将其中的变量改为数组变量, 即为数组变量,因此,也有三种形式:,形式一(先定义结构体类型,再定义结构体数组变量): struct student int num; char name20; char sex; int age; ; struct student stu2; /定义结构体数组变量stu0,s

9、tu1,形式二(定义结构体类型的同时,直接定义结构体 数组变量): struct student int num; char name20; char sex; int age; stu2; /定义结构体数组变量stu0,stu1,形式三(定义无名结构体类型的同时,直接定义结构体数组变量): struct int num; char name20; char sex; int age; stu2; /定义结构体数组变量stu0,stu1 注意:结构体数组变量stu0和stu1中都有4 个成员项。,8.6 结构体数组初始化,结构体数组的初始化与数组的初始化类似(参见数组初始化章节),例如: st

10、ruct student int num; char name20; char sex; int age; ; struct student stu =100,“张一平”,M,40, 101,“李小丹”,M,49, 102,“王八一”,F,19;,8.7 结构体指针变量,不同类型的指针指向不同类型的变量,例如: char *p1; /定义字符型指针变量p1(p1指向字符型) int *p2; /定义整型指针变量p2(p2指向整型) float *p3; /定义实型指针变量p3(p3指向实型) 结构体是构造型数据,要指向结构体,则要定义结构体指 针变量,结构体指针变量的定义格式为:,struct

11、 结构体名 *结构体指针名;,例如: struct student stu; /定义结构体变量stu struct student *p; /定义结构体指针变量p p= /定义结构体指针变量p,并指向结构体变量stu,定义结构体指针变量后,可以用结构体指针变量来访问结构体 成员,其访问形式为:,结构体指针名-成员名 或 (*结构体指针名).成员名,例如: struct student int num; char name20; char sex; int age; ; struct student stu; /定义结构体变量stu struct student *p; /定义结构体指针变量p

12、strcpy(p-name,”王八一”); /与strcpy(stu.name,”王八一”);等效 (*p).num=101; /与stu.num=101;等效,/结构体指针程序例。 struct student int num; char name20; char sex; float score; stu,*p; main() p= /*运行结果: 学号:10000 姓名:王八一 性别:M 成绩:89.5 */,8.8 共用体,共用体的定义和使用与结构体一样,只要将结构体的 struct改为union即可。共用体的定义格式为: union 共用体名 类型 成员名; 类型 成员名; ; ;

13、由于共用体与结构体的使用方法一样,读者只要仿照 结构体的使用方法使用就可以了。以下就两者的区别加以 说明。,为什么要引入共用体?让我们从一个共用体例子开始,例如,定义共用体: union file unsigned int handle; /定义无符号整型成员handle unsigned int Handle /定义无符号整型成员Handle unsigned int HANDLE; /定义无符号整型成员HANDLE ; union file h; /定义共用体变量h 以上共用体定义了三个成员handle、Handle和HANDLE。在 程序设计中,handle、Handle或HANDLE一

14、般用来表示文件描述 字或称文件句柄。这样定义的目的是:程序员在程序中可随意使用 三个共用体变量中的任何一个(其效果是一样的),因而无须程序 员记忆handle的大小写。引入共用体的目的正是为了满足此类用法 (同一个问题有几种不同的表示方法)。,例如,点式IP地址168.192.1.2由4个8位二进制数组成(网 络编程中,最后的结果是将4个8位二进制数转 为一个长整 型数)。 4个8位二进制数,可以用4个char表示,也可以用一个int表 示,因此,可以定义以下共用体: unsion fip char byte1; /字符型(1字节) char byte2; char byte3; char b

15、yte4; int wip; /整型(4字节) ; union fip adr; /定义共用体变量adr,实际使用中,可以根据数据类型而选用 其中的一种表示方法,例如: adr.byte1=168; adr.byte2=192; adr.byte3=1; adr.byte4=2; 也可将整个点式IP地址先转为长整型数 n,然后再送入wip,例如: adr.wip=n;,弄清楚引入共用体的出发点后,就不难理解共用体的以下特 点: 共用体中的成员存储在同一块地址上,占用空间的大小由成员 中占用空间最大的决定(结构体占用的空间是所有成 员之和)。 (2) 同一个时刻只能有一个成员起作用,共用体不能初始化。 (3) 同一个地址上的内容可以用不同的名字存取。 为了理解共用体的特点,我们可以举一个这样的比如:姚明和 潘长江同睡一张床。这件事有以下特点: a.姚明和潘长江睡的是同一张床(不是同时),床的最大长度 为姚明的身高。 b.同一个时间只能睡一个人。 c.同一张床,可以说是姚明的床,也可以说是潘长江的床。,例如,共用体: union unsigned int handle; /定义无符号整型成员handle unsigned int

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号