第11章 结构体 (2).ppt
《第11章 结构体 (2).ppt》由会员分享,可在线阅读,更多相关《第11章 结构体 (2).ppt(35页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 C C语言程序设计语言程序设计第第14章章 结构与链表结构与链表为将不同数据类型、但相互关联的一组数据,组合为将不同数据类型、但相互关联的一组数据,组合成一个有机整体使用,成一个有机整体使用,C语言提供一种称为语言提供一种称为“结构结构”的的数据结构。数据结构。14.1 结构类型与结构变量的定义结构类型与结构变量的定义14.2 结构变量的引用与初始化结构变量的引用与初始化14.3 结构数组结构数组14.4 指向结构类型数据的指针指向结构类型数据的指针14.5 链表处理链表处理结构指针的应用结构指针的应用14.6 共用型和枚举型共用型和枚举型14.7 定义已有类型的别名定义已有类型的别名Ret
2、urn C C语言程序设计语言程序设计14.1 14.1 结构类型与结构变量的定义结构类型与结构变量的定义结构类型与结构变量的定义结构类型与结构变量的定义C语言中的结构类型,相当于其它高级语言中的语言中的结构类型,相当于其它高级语言中的“记录记录”类型。类型。10.1.1 结构类型定义struct 结构类型名结构类型名 /*struct是结构类型关键字是结构类型关键字*/数据类型数据类型 数据项数据项1;数据类型数据类型 数据项数据项2;数据类型数据类型 数据项数据项;/*此行分号不能少!此行分号不能少!*/案例10.1 定义一个反映学生基本情况的结构类型,用以存储学生的相关定义一个反映学生基
3、本情况的结构类型,用以存储学生的相关信息。信息。/*案例代码文件名:案例代码文件名:AL10_1.C。*/*功能:定义一个反映学生基本情况的结构类型功能:定义一个反映学生基本情况的结构类型*/C C语言程序设计语言程序设计struct date /*日期结构类型:由年、月、日三项组成日期结构类型:由年、月、日三项组成*/int year;int month;int day;struct std_info/*学学生生信信息息结结构构类类型型:由由学学号号、姓姓名名、性性别别和和生生日日共共4项项组成组成*/char no7;char name9;char sex3;struct date bir
4、thday;struct score/*成绩结构类型:由学号和三门成绩共成绩结构类型:由学号和三门成绩共4项组成项组成*/char no7;int score1;int score2;int score3;C C语言程序设计语言程序设计(1)“结构类型名结构类型名”和和“数据项数据项”的命名规则,与变量名相同。的命名规则,与变量名相同。(2)数数据据类类型型相相同同的的数数据据项项,既既可可逐逐个个、逐逐行行分分别别定定义义,也也可可合并成一行定义。合并成一行定义。例如,本案例代码中的日期结构类型,也可改为如下形式:例如,本案例代码中的日期结构类型,也可改为如下形式:struct date i
5、nt year,month,day;(3)结结构构类类型型中中的的数数据据项项,既既可可以以是是基基本本数数据据类类型型,也也允允许许是是另一个已经定义的结构类型。另一个已经定义的结构类型。例例 如如,本本 案案 例例 代代 码码 中中 的的 结结 构构 类类 型型 std_info,其其 数数 据据 项项“birthday”就是一个已经定义的日期结构类型就是一个已经定义的日期结构类型date。(4)本书将个数据项称为结构类型的个成员(或分量)。本书将个数据项称为结构类型的个成员(或分量)。C C语言程序设计语言程序设计10.1.2 结构变量定义用用户户自自己己定定义义的的结结构构类类型型,与
6、与系系统统定定义义的的标标准准类类型型(int、char等)一样,可用来定义结构变量的类型。等)一样,可用来定义结构变量的类型。1.定义结构变量的方法,可概括为两种:定义结构变量的方法,可概括为两种:(1)间接定义法先定义结构类型、再定义结构变量先定义结构类型、再定义结构变量例例如如,利利用用案例10.1中中定定义义的的学学生生信信息息结结构构类类型型std_info,定定义了一个相应的结构变量义了一个相应的结构变量student:struct std_info student;结结构构变变量量student:拥拥有有结结构构类类型型的的全全部部成成员员,其其中中birthday成成员是一个日
7、期结构类型,它又由员是一个日期结构类型,它又由3个成员构成。个成员构成。注意:使使用用间间接接定定义义法法定定义义结结构构变变量量时时,必必须须同同时时指指定定结结构构类类型名。型名。C C语言程序设计语言程序设计(2)直接定义法在定义结构类型的同时,定义结构变量在定义结构类型的同时,定义结构变量例如,结构变量例如,结构变量student的定义可以改为如下形式:的定义可以改为如下形式:struct std_info student;同时定义结构类型及其结构变量的一般格式如下:同时定义结构类型及其结构变量的一般格式如下:struct 结构类型名 结构变量表;2.说明说明(1)结结构构类类型型与与
8、结结构构变变量量是是两两个个不不同同的的概概念念,其其区区别别如如同同int类类型型与与int型变量的区别一样。型变量的区别一样。(2)结结构构类类型型中中的的成成员员名名,可可以以与与程程序序中中的的变变量量同同名名,它它们们代代表表不不同同的对象,互不干扰。的对象,互不干扰。Return C C语言程序设计语言程序设计14.2 14.2 结构变量的引用与初始化结构变量的引用与初始化结构变量的引用与初始化结构变量的引用与初始化 案例14.2 利用利用案例10.1中定义的结构类型中定义的结构类型struct std_info,定义定义一个结构变量一个结构变量student,用于存储和显示一个学
9、生的基本情况。用于存储和显示一个学生的基本情况。/*案例代码文件名:案例代码文件名:AL10_2.C*/#includestruct.h/*定义并初始化一个外部结构变量定义并初始化一个外部结构变量student*/struct std_info student=000102,张三张三,男男,1980,9,20;main()printf(No:%sn,student.no);printf(Name:%sn,student.name);printf(Sex:%sn,student.sex);printf(Birthday:%d-%d-%dn,student.birthday.year,studen
10、t.birthday.month,student.birthday.day);程序演示 C C语言程序设计语言程序设计程序运行结果:程序运行结果:No:000102Name:张三张三Sex:男男Birthday:1980-9-20 1.结构变量的引用规则对对于于结结构构变变量量,要要通通过过成成员员运运算算符符“.”,逐逐个个访访问问其其成成员员,且且访问的格式为:访问的格式为:结构变量.成员 /*其中的其中的“.”是成员运算符是成员运算符*/例例如如,案案例例中中的的student.no,引引用用结结构构变变量量student中中的的no成成员员;student.name引用结构变量引用结构
11、变量student中的中的name成员,等等。成员,等等。C C语言程序设计语言程序设计如如果果某某成成员员本本身身又又是是一一个个结结构构类类型型,则则只只能能通通过过多多级级的的分分量量运运算,对最低一级的成员进行引用。算,对最低一级的成员进行引用。此时的引用格式扩展为:此时的引用格式扩展为:结构变量.成员.子成员.最低1级子成员例如,引用结构变量例如,引用结构变量student中的中的birthday成员的格式分别为:成员的格式分别为:student.birthday.yearstudent.birthday.monthstudent.birthday.day(1)对对最最低低一一级级成
12、成员员,可可像像同同类类型型的的普普通通变变量量一一样样,进进行行相相应应的各种运算。的各种运算。(2)既可引用结构变量成员的地址,也可引用结构变量的地址。)既可引用结构变量成员的地址,也可引用结构变量的地址。C C语言程序设计语言程序设计例如,例如,&student.name,&student。2.结构变量的初始化结构变量的初始化结构变量初始化的格式,与一维数组相似:结构变量初始化的格式,与一维数组相似:结构变量=初值表不不同同的的是是:如如果果某某成成员员本本身身又又是是结结构构类类型型,则则该该成成员员的的初初值值为为一一个初值表。个初值表。例例 如如,案 例 10.2中中 的的 stu
13、dent=000102,张张 三三,男男,1980,9,20。注意:初初值值的的数数据据类类型型,应应与与结结构构变变量量中中相相应应成成员员所所要要求求的的一一致致,否则会出错。否则会出错。Return C C语言程序设计语言程序设计10.3 10.3 结构数组结构数组结构数组结构数组结构数组的每一个元素,都是结构类型数据,均包含结构类型结构数组的每一个元素,都是结构类型数据,均包含结构类型的所有成员。的所有成员。案例10.3 利用利用案例10.1中定义的结构类型中定义的结构类型struct std_info,定义一个结构数组定义一个结构数组student,用于存储和显示三个学生的基本情况。
14、用于存储和显示三个学生的基本情况。/*案例代码文件名:案例代码文件名:AL10_3.C*/#includestruct.h/*定义并初始化一个外部结构数组定义并初始化一个外部结构数组student3*/struct std_info student3=“000102”,“张三张三”,“男男”,1980,9,20,“000105”,“李四李四”,“男男”,1980,8,15,“000112”,“王五王五”,“女女”,1980,3,10 ;C C语言程序设计语言程序设计/*主函数主函数main()*/main()int i;/*打印表头打印表头:表示表示1个空格字符个空格字符*/printf(No
15、.NameSexBirthdayn);/*输出三个学生的基本情况输出三个学生的基本情况*/for(i=0;ino);printf(Name:%sn,p_std-name);printf(Sex:%sn,p_std-sex);printf(Birthday:%d-%d-%dn,p_std-birthday.year,p_std-birthday.month,p_std-birthday.day);程序演示 C C语言程序设计语言程序设计通通过过指指向向结结构构变变量量的的指指针针来来访访问问结结构构变变量量的的成成员员,与与直直接接使使用用结结构构变变量量的的效效果果一一样样。一一般般地地说说,
16、如如果果指指针针变变量量pointer已已指指向向结结构构变量变量var,则以下三种形式等价:则以下三种形式等价:(1)var.成员成员(2)pointer-成员成员(3)(*pointer).成员成员 /*“*pointer”外面的括号不能省!外面的括号不能省!*/注意:在在格格式式(1)中中,分分量量运运算算符符左左侧侧的的运运算算对对象象,只只能能是是结结构构变变量量,;而而在在格格式式(2)中中,指指向向运运算算符符左左侧侧的的运运算算对对象象,只只能能是是指向结构变量(或结构数组)的指针变量,否则都出错。指向结构变量(或结构数组)的指针变量,否则都出错。思考题:如如果果要要求求从从键
17、键盘盘上上输输入入结结构构变变量量student的的各各成成员员数数据据,如何修改程序?如何修改程序?C C语言程序设计语言程序设计10.4.2 指向结构数组的指针案例10.5 使用指向结构数组的指针来访问结构数组。使用指向结构数组的指针来访问结构数组。/*案例代码文件名:案例代码文件名:AL10_5.C*/#includestruct.h/*定义并初始化一个外部结构数组定义并初始化一个外部结构数组student*/struct std_info student3=000102,张三张三,男男,1980,5,20,000105,李四李四,男男,1980,8,15,“000112”,“王五王五”
18、,“女女”,1980,3,10;main()struct std_info *p_std=student;int i=0;/*打印表头打印表头*/printf(No.NameSexBirthdayn);C C语言程序设计语言程序设计/*输出结构数组内容输出结构数组内容*/for(;ino,p_std-name,p_std-sex);printf(%4d-%2d-%2dn,p_std-birthday.year,p_std-birthday.month,p_std-birthday.day);程序演示如如果果指指针针变变量量p已已指指向向某某结结构构数数组组,则则p+1指指向向结结构构数数组组的
19、的下下一一个元素,而不是当前元素的下一个成员。个元素,而不是当前元素的下一个成员。另另外外,如如果果指指针针变变量量p已已经经指指向向一一个个结结构构变变量量(或或结结构构数数组组),就不能再使之指向结构变量(或结构数组元素)的某一成员。就不能再使之指向结构变量(或结构数组元素)的某一成员。C C语言程序设计语言程序设计10.4.3 指向结构数据的指针作函数参数案例10.6 用用函函数数调调用用方方式式,改改写写案例10.5:编编写写一一个个专专门门的的显显示示函函数数display(),通过主函数调用来实现显示。通过主函数调用来实现显示。/*案例代码文件名:案例代码文件名:AL10_6.C*
20、/#includestruct.h/*定义并初始化一个外部结构数组定义并初始化一个外部结构数组student*/struct std_info student3=000102,张三张三,男男,1980,5,20,000105,李四李四,男男,1980,8,15,“000112”,“王五王五”,“女女”,1980,3,10;/*主函数主函数main()*/main()void display();/*函数说明函数说明*/int i=0;/*打印表头打印表头*/printf(No.NameSexBirthdayn);C C语言程序设计语言程序设计 /*打印内容打印内容*/for(;ino,p_st
21、d-name,p_std-sex);printf(%4d-%2d-%2dn,p_std-birthday.year,p_std-birthday.month,p_std-birthday.day);程序演示Return C C语言程序设计语言程序设计14.5 14.5 链表处理链表处理链表处理链表处理结构指针的应用结构指针的应用结构指针的应用结构指针的应用14.5.1 概述1链表结构链表结构链链表表作作为为一一种种常常用用的的、能能够够实实现现动动态态存存储储分分配配的的数数据据结结构构,在在数数据据结结构构课课程程中中有有详详细细介介绍绍。为为方方便便没没有有学学过过数数据据结结构构的的读读
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第11章 结构体 2 11 结构
限制150内