C语言程序设计教程修订本 结构体与联合体.pptx
《C语言程序设计教程修订本 结构体与联合体.pptx》由会员分享,可在线阅读,更多相关《C语言程序设计教程修订本 结构体与联合体.pptx(45页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、8.1程序与程序文件程序与程序文件8.1.1结构体类型变量的定义结构体类型变量的定义定义结构类型变量包括两个方面:首先要定义结构体类型,以便确定该类型中有哪些成员,各成员属于什么数据类型;然后再定义属于该结构体类型的变量。第2页/共45页第1页/共45页1定义结构体类型定义结构体类型定义结构体类型的一般形式如下:struct结构体类型名成员表;其中在“成员表”中定义了该类型中有哪些成员,各成员属于什么数据类型。第3页/共45页第2页/共45页2定义结构体类型变量定义结构体类型变量定义结构体类型变量的一般形式为struct结构体类型名变量表;定义结构体类型与定义结构体类型变量是分开说明的。C语言
2、还允许在定义结构体类型的同时定义结构体类型变量。其形式为struct结构体类型名成员表变量表;第3页/共45页如果在函数体外定义了一个结构体类型,则从定义位置开始到整个程序文件结束之间的所有函数中均可定义该类型的变量;但在函数体内所定义的结构体类型,只能在该函数体内能定义该类型的变量。即结构体类型的定义与普通变量定义的作用域是相同的。第4页/共45页8.1.2结构体类型变量的引用结构体类型变量的引用在程序中定义了某结构体类型的变量后就可以被引用。结构体变量的一般引用方式如下:结构体变量名.成员名其中“.”为结构体成员运算符,它的优先级最高。第5页/共45页8.1.3结构体的嵌套结构体的嵌套C
3、C语言规定,结构体类型的定义可以嵌套。第6页/共45页8.1.4结构体类型变量的初始化结构体类型变量的初始化与普通变量一样,在定义结构体类型变量的同时也可以对结构体类型变量赋初值。但C语言规定,只能对全局的或静态的局部结构体类型变量进行初始化。为了将结构体类型变量定义为静态存储类型,在定义时应加上static关键字。但是,目前在大部分计算机系统中,对结构体类型变量初始化时不必加static关键字,其原理与普通数组的初始化一样。第7页/共45页8.1.5结构体与函数结构体与函数1结构体类型变量的成员作为函数参数结构体类型变量的成员作为函数参数与数组元素可以作为函数参数一样,结构体类型变量中的成员
4、也可以作为函数参数。在这种情况下,在被调用函数中的形参是一般变量,而调用函数中的实参是结构体类型变量中的一个成员,但要求它们的类型应一致。第8页/共45页2结构体类型变量作为函数参数结构体类型变量作为函数参数与一般变量可以作为函数参数一样,结构体类型的变量也可以作为函数参数。在这种情况下,在被调用函数中的形参是结构体类型的变量,调用函数中的实参也是结构体类型的变量,但要求它们属于同一个结构体类型。第9页/共45页3结构体类型的函数结构体类型的函数与定义标准数据类型函数一样,C语言也允许定义结构体类型的函数。结构体类型函数的返回值是结构体类型的数据。第10页/共45页8.2结构体数组结构体数组8
5、.2.1结构体数组的定义与引用结构体数组的定义与引用 与整型数组、实型数组、字符型数组一样,在程序中也可以定义结构体类型的数组。但C语言规定,同一个结构体数组中的元素应为同一种结构体类型。第11页/共45页例如,structstudentintnum;charname10;charsex;intage;floatscore3;stu10;定义了“学生情况”型的一个数组stu,可存放10个学生的情况。每一个学生的情况包括:学号(num)、姓名(name10)、性别(sex)、年龄(age)、3个成绩(score3)。实际上,定义了该数组后,相当于开辟了一个如表8.1所示的表格空间。第12页/共4
6、5页表8.1学生情况型的数组表格空间num学号name姓名sex性别age年龄score0成绩1score1成绩2score2成绩3第13页/共45页8.2.2结构体数组作为函数参数结构体数组作为函数参数与普通数组一样,结构体类型数组也能作为函数参数,并且形参与实参结合的方式完全一样。如果在被调用函数中改变了结构体类型形参数组元素中各成员值,实际上也就改变了结构体类型实参数组元素中的各成员值。因为结构体类型形参数组与结构体类型实参数组是同一个存储空间。第14页/共45页8.3结构体与指针结构体与指针8.3.1结构体类型指针变量的定义与引用结构体类型指针变量的定义与引用结构体类型的指针变量指向结
7、构体类型变量或数组(或数组元素)的起始地址。例如,structstudentintnum;charname10;charsex;intage;floatscore;structstudentst1,st2,st10,*p;其中定义了一个指向结构体“学生情况”型的指针p。第15页/共45页由上所述,当结构体类型的指针变量p指向一个结构体类型变量后,下列3种表示是等价的:结构体变量名.成员(*p).成员p成员它们都表示结构体变量中的一个成员。第16页/共45页8.3.2结构体类型指针作为函数参数结构体类型指针作为函数参数 结构体类型指针可以指向结构体类型的变量,因此,当形参是结构体类型指针变量时,
8、实参也可以是结构体类型指针(即地址)。在结构体类型指针作为函数参数的情况下,由于传送的是地址,因此,如果在被调用函数中改变了结构体类型形参指针所指向的地址中的值,实际上也就改变了结构体类型实参指针所指向的地址中的值。第17页/共45页例例8.7用结构体类型指针作为函数参数。在下面的程序中,主函数的功能是定义了一个结构体student型的变量st,同时为之初始化,然后输出变量st中各成员的值,将结构体类型变量st的地址(即&st)作为实参调用函数chang()后再输出变量st中各成员的值;函数chang()的功能是修改结构体类型形参指针t所指向的结构体类型数据中成员tscore的值,并输出修改前
9、后结构体类型指针所指向的数据中各成员的值。第18页/共45页#includestdio.hstructstudentintnum;charname10;charsex;intage;floatscore;voidchang(t)structstudent*t;printf(t%6d%8s%3c%4d%7.2fn,tnum,tname,tsex,tage,tscore);tscore95.0;printf(t%6d%8s%3c%4d%7.2fn,tnum,tname,tsex,tage,tscore);第19页/共45页main()staticstructstudentst101,Zhang,M
10、,19,89.0;printf(st%6d%8s%3c%4d%7.2fn,st.num,st.name,st.sex,st.age,st.score);chang(&st);printf(st%6d%8s%3c%4d%7.2fn,st.num,st.name,st.sex,st.age,st.score);第20页/共45页 结构体类型指针也可以指向数组或数组元素,因此,当形参是结构体类型指针变量时,实参也可以是结构体类型数组名或数组元素的地址。与标准数据类型的数组与指针一样,在结构体类型数组指针作函数参数时,也可以有以下4种情况:(1)实参与形参都用结构体类型数组名;(2)实参用结构体类型数
11、组名,形参用结构体类型指针变量;(3)实参与形参都用结构体类型指针变量;(4)实参用结构体类型指针变量,形参用结构体类型数组名。第21页/共45页8.4链链表表8.4.1链表的基本概念链表的基本概念1链表的一般结构链表的一般结构链表由结点元素组成。为了适应链表的存储结构,计算机存储空间被划分为一个一个小块,每一小块占若干字节,通常称这些小块为存储结点。将存储空间中的每一个存储结点分为两部分:一部分用于存储数据元素的值,称为数据域;另一部分用于存放下一个数据元素的存储序号(即存储结点的地址),称为指针域。第22页/共45页每一个结点的结构如图8.1所示。图8.1链表的结点结构第23页/共45页在
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C语言程序设计教程修订本 结构体与联合体 语言程序设计 教程 修订本 结构 联合体
限制150内