《结构共用型和》PPT课件.ppt
《《结构共用型和》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《结构共用型和》PPT课件.ppt(48页珍藏版)》请在三一办公上搜索。
1、第10章 结构、共用型和枚举型,10.1 结构类型及结构变量的定义为将不同数据类型、但相互关联的一组数据,组合成一个有机整体使用,C语言提供一种称为“结构”的数据结构。C语言中的结构类型,相当于其它高级语言中的“记录”类型。10.1.1 结构类型定义定义一个结构体类数据类型的一般格式如下:struct 结构类型名/*struct是结构类型关键字*/数据类型标识符 数据项1;数据类型标识符 数据项2;数据类型标识符 数据项;/*注意此行“”后的“;”不能少!*/,例题10.1 定义一个关于学生基本情况的结构类型,用以存学生的相关信息。/*功能:定义一个记录学生成绩的结构类型*/struct da
2、te int year;int month;int day;/*记录学生成绩的结构类型:由学号、姓名、成绩和考试日期4项组成*/struct student_score char num9;char name11;struct date exam_date float score;,注意:学号若为8位,则num数组要为num9,多留1位存放字符串结束符。同理姓名数组name11 也多留了1位(即实际姓名最多只能用10位)。(1)“结构类型名”和“数据项”的命名规则,与变量名相同。(2)数据类型相同的数据项,既可逐个、逐行分别定义,也可合并成一行定义。例如,本例题代码中的日期结构类型,也可改为如
3、下形式:struct date int year,month,day;(3)结构类型中的数据项,既可以是基本数据类型,也允许是另一个已经定义的结构类型。例如,上述例题代码中的结构类型,其数据项“exam_date”就是一个已经定义的日期结构类型date。(4)通常将个数据项称为结构类型的个数据项(或1个成员)。,10.1.2 定义结构体类型变量,1先定义结构类型、再定义结构变量我们在例题10.1中定义了一个用于存放学生成绩的结构类型student _score,还没有定义该类型的变量,只有定义该结构类型的变量后,系统才能为其分配内存单元,进而才能在变量中存放数据。以下就用例题10.1定义中定义
4、结构类型student _score定义一个学生成绩结构类型变量stud1_score,来说明结构体类型变量的定义方法:struct student _score stud1_score,stud2_score;结构体类型名 结构体变量名结构变量stud1_score和stud2_score:拥有student _score结构类型的全部成员,其中exam_date成员是一个日期结构类型,它又由3个成员构成。在这个例子中,我们先定义了结构类型student_score、再定义结构变量stud1_score和stud2_score。注意,此种方法在定义结构变量时,必须指定结构类型名。另外,还可以
5、在定义结构类型的同时,定义结构变量。,2在定义结构类型的同时,定义结构变量对例题10.1的结构类型变量stud1-score的定义可以改为如下形式:struct student _score char num9;char name11;struct date exam_date float score;stud1_score,stud2_score;这种方法定义的作用和上一种方法相同,所不同的是后者将结构类型的定义和结构变量的声明同时完成。,同时定义结构类型及其结构变量的一般格式如下:struct 结构体类型名 成员表列 结构变量表列;提示:(1)结构类型与结构变量是两个不同的概念。通常变量可
6、以被赋值、参加运算,而不能对一个类型赋值或运算。例如对int型变量x可以有x=1,y=x+1等操作,而不能对int类型本身进行这些操作,例如,int=6是错误的。(2)结构体类型中的成员也可以是一个结构体变量。(3)结构体类型中的成员名,可以与程序中的变量同名,它们代表不同的对象,互不相关。,10.2 结构变量的引用与初始化,利用例题10.1中定义的结构类型struct student_score,并由此结构类型定义一个用于存储和显示学生的考试成绩的结构变量stud1_score。例题10.2 结构变量的引用实例/*例题原代码文件名:LT10_2.C。定义并初始化一个自定义结构变量stud1_
7、score*/struct date int year;int month;int day;/*记录学生成绩的结构类型:由学号、姓名、成绩和考试日期4项组成*/,struct student_score char num9;char name11;struct date exam_date float score;struct student_score stud1_score=“05000102”,“Wang qiang”,2006,12,20,90;main()printf(“XH:%sn”,stud1_score.num);printf(“XM:%sn”,stud1_score.name
8、);printf(“exam_date:%d.%d.%dn”,stud1_score.exam_date.year,stud1_score.exam_date.month,stud1_score.exam_date.day);printf(“score:%f n”,stud1_score.score);,程序运行结果:XH:05000102XM:Wang qiangexam_datescore:90.000000,1结构变量的引用,通过例题10.2可以知道,对于结构变量,要通过成员运算符“.”,逐个访问其成员,即结构变量中成员的引用方式为:结构变量成员名 例如例题10.2中引用结构变量stud
9、1_score.num中的num成员。如果某成员本身又是一个结构类型,则只能通过多个成员运算符,一级一级地对最低一级的成员进行引用。例如例题10.2中,stud1_score结构类型中的成员exam_date又是一个结构类型,所以只能通过成员运算符“.”继续引用其下的子成员year、month和day:stud1_score.exam_date.month,关于结构变量引用的说明:(1)不能把一个结构变量当作一个整体进行输入输出及相关运算操作,而只能对其最低一级成员分别进行类似于同类型的普通变量一样的输入输出及相关运算操作。例如:sum=stud1_score.score+stud2_scor
10、e.scorestud1_score.exam_date.year=2005(2)可以引用结构变量成员的地址,也可引用结构变量的地址。例如:printf(“%x”,/*输出stud1_score的首地址*/结构变量的地址一般用作函数的实参,用于传递结构变量的数据。,2.结构变量的初始化,与基本类型变量一样,结构变量可以在定义时赋初值,具体格式如下:struct 结构体类型名 成员表列 结构变量=初值表,结构变量=初值表;或 struct 结构体类型名 成员表列;struct 结构体类型名 结构表列结构变量=初值表结构变量初始化的格式,与一维数组类似,但在结构变量的成员本身又是结构类型时,该成员
11、的初值为一个初值表。例如,例题10.2中的stud1_score=“05000102”,“Wang qiang”,2006,12,20,90。提示:初值的数据类型,应与结构变量中相应成员所要求的一致,否则会出错。,10.3结构数组,由例题10.1定义的结构类型student _score只能存储一个学生的成绩数据,如果要存储一个班所有学生的成绩,则需要结构数组。10.3.1 结构体数组的定义与初始化1结构体数组的定义与定义结构类型变量的方法类似,但需要将其说明为数组。定义一个结构类型,并声明一个具有3个元素,数组名为stud的结构数组。struct stud_score char num9;c
12、har name11;float score;struct stud _score stud3/*间接定义结构体数组stud3*/,以上定义的结构体数组stud3中的每一个元素均为struct student_score类型数据。当然,也可以直接定义一个结构体数组stud3,例如:struct stud_score char num9;char name11;float score;stud3;注意:结构数组中的各元素及其成员在内存中都是连续存放的。,2结构体数组的初绐化,对结构体数组的初始化与其它类型的数组类似,当然,结构体数组初始化时要对其元素中的每一个成员初始化。例如对以上定义的结构数组
13、进行初始化。struct stud_score char num9;char name11;float score;stud3=“05001001”,“Wang qiang”,90.0,“05001002”,“Xu chen”,85.5,“05001003”,“Zhang qing”,86.0;定义stud数组时,元素的个数也可以不指定,即写成如下形式:stud=,;,系统在编译时,根据给出初值结构体常量的个数来确定数组元素的个数。数组的初始化还可以用下列形式初始化:struct stud_ info char num9;struct stud_ info stud=,;因此,可以先声明结构类
14、型,然后定义结构数组,在定义数组时初始化。3结构数组的应用结构数组的引入为存储和处理多个同类型的结构体类型变量带来方便。,例题10.3结构数组的应用。定义、初始化结构数组,并输出数组元素。struct date int year;int month;int day;struct stud_ info/*定义结构类型stud_info*/char num9;/*用于存放学生的学号成员*/char name11;/*用于存放学生姓名成员*/char sex3;/*用于存放学生的性别成员*/struct date birthday;/*用于存放学生生日成员*/stud4=“05001001”,“王强
15、”,“男”,1984,3,10,“05001002”,“李莉”,“女”,1983,12,10,“05001003”,“张芹”,“女”,1984,6,10,“05001004”,“徐诚”,“男”,1983,2,15;main()int i;/*打印表头,“”表示1个空格*/printf(“学号姓名性别出生日期n”);/*输出学生信息*/for(i=0;i4;i+)printf(“%-9s”,studi.num);printf(“%-11s”,studi.name);printf(“%-5s”,studi.sex);printf(“%d.%d.%dn”,studi.birthday.year,st
16、udi.birthday.month,studi.birthday.day);,运行结果如下:学号 姓名 性别 出生日期05001001 王强 男 1984.3.10 05001002 李莉 女 1983.12.10 05001003 张芹 女 1984.6.10 05001004 徐诚 男 1983.2.15,10.3.2 指向结构体类型变量的指针,一个结构体变量是由多个成员组成,而这些成员在内存中是连续存放的,一个结构变量的地址指的是该结构变量的首地址。所谓指向结构体类型变量的指针就是结构体变量存储的首地址。即:结构变量在内存中的起始地址称为结构变量的指针。如:struct stud_in
17、fo*p;说明p是指向结构stud_info类型变量的指针。例题10.4使用指向结构变量的指针来访问结构变量的各个成员。/*例题原代码文件名:LT10_4.C*/struct date int year;int month;int day;,struct stud_info/*定义结构类型stud_info*/char num9;/*用于存放学生的学号成员*/char name11;/*用于存放学生姓名成员*/char sex3;/*用于存放学生的性别成员*/struct date birthday;/*用于存放学生生日成员*/;struct stud_info stud=“05001001”
18、,“王强”,“男”,1984,3,10;main()struct stud_info*p_st=,运行结果如下:学号:05001001姓名:王强性别:男出生日期:1984-3-10,通过指向结构变量的指针来访问结构变量的成员,与直接使用结构变量的效果一样。一般地说,如果指针变量pointer已指向结构变量,则以下三种形式等价:结构变量名.成员pointer-成员(*pointer).成员 提示:(1)在格式中,分量运算符左侧的运算对象,只能是结构变量,不能是指针变量。(2)在格式中,减号“-”与大于号“”组成指向运算符“-”,指向运算符左侧的运算对象,只能是指向结构变量(或结构数组)的指针变量
19、,而不能是结构变量,否则都出错。另外,指向运算符“-”中的符号“-”和“”之间不能有空格。(3)在格式中,“*pointer”外面的括号不能省!,因为分量运算符“.”的优先级高于指针运算符“*”,如果不加括号,则变成了*(pointer.成员),因而产生语法错误。,10.3.3 指向结构数组的指针,现在我们知道,定义一指针变量,用来指向一个结构变量,此时指针变量的值就是所指向的结构变量的首地址。当然,指针变量也可用来指向结构数组中的元素。如果用指针变量来指向结构数组元素,同样也可以达到方便访问结构数组元素及元素中成员的目的。例题10.5使用指针来访问结构数组的元素。/*例题原代码文件名:LT1
20、0_5.C*/struct date int year;int month;int day;,struct stud_info/*定义结构类型stud_info*/char num9;/*用于存放学生的学号成员*/char name11;/*用于存放学生姓名成员*/char sex3;/*用于存放学生的性别成员*/struct date birthday;/*用于存放学生生日成员*/;/*定义并初始化结构数组stud*/struct stud_info stud4=“05001001”,“王强”,“男”,1984,3,10,“05001002”,“李莉”,“女”,1983,12,10,“050
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 结构共用型和 结构 共用 PPT 课件

链接地址:https://www.31ppt.com/p-5589834.html