内容正文:
教案用纸
第 10 周 总第 30 次 学时:2
教学班级: 课程:C语言程序设计 授课教师:
课题: 7.3 结构体数组和结构体指针的使用
教学方法:演示
教具:多媒体计算机
教学目标:熟练掌握结构体以及结构体数组、指针
教学重点:结构体数组、结构体指针的使用
教学难点:结构体指针的应用
主要教学内容:
7.3 结构体数组和结构体指针的使用
7.3.1 结构体数组
7.3.2 结构体指针
小结:
课后回顾:
教案用纸
四个一:
提问:结构体的三种定义方式
导入:上节课我们学习了结构体的基本知识、的相关知识,这节课我们学习结构体数组、结构体指针的知识。
正文:
7.3 结构体数组和结构体指针的使用
7.3.1 结构体数组
1.结构体数组的定义
与其他基本类型的数组一样,结构体型数组就是定义一组内存空间连续的数据元素,只不过这些数据元素每个都是一个结构体类型的变量。结构体型数组的定义方式如下:
(
struct 结构体类型名
{
成员说明表列
};
struct 结构体类型名 数组名[数组元素个数];
)
例如,若想存储一个班的30名所有学生信息,可定义一个结构体类型的数组:
struct student /*学生结构体类型定义*/
{
char number[14]; /*学号*/
char name[10]; /*姓名*/
int age; /*年龄*/
char sex[3]; /*性别*/
char nation[20]; /*民族*/
char mobile[12]; /*手机*/
char address[40]; /*通讯地址*/
};
struct student stu[30]; /*定义一个学生类型的结构体数组stu,可以存储30个学生信息*/
则定义了一个具有30个元素的结构体数组stu,其中stu[0]、stu[1]……stu[29]为数组中各元素,每个元素都是一个结构体变量,可以存储一个学生信息。
2.结构体数组的初始化
结构体数组也可以像普通数组一样进行初始化,这时可以用两层花括号把初始值括起来,例如下面语句定义了一个具有2个元素的结构体数组stu,并为这两个元素初始化:
struct student stu[2]={
{"2013011020001","宋晓倩",18,"女","汉族","15840231111","沈阳市大东区劳动路32号"},
{"2013011020002","赵子强",19, "男","汉族","13040887123","沈阳市沈河区惠工街28号"}};
提示:当结构体数组初始化时
在初始化的时候对应位置的成员赋值与其类型要一致,否则会出错。
3.结构体数组各元素中成员的引用
结构体数组各元素中成员的引用方法如下:
(
数组名[数组下标值].成员名
)
在引用结构体类型数组中各元素时,变量名是“数组名[数组下标值]”,然后用直接运算符“.”连接结构体的“成员名”即可。例如:
stu[0].age=18; /*为结构体数组第一个元素的成员age赋初值为18*/
7.3.2 结构体指针
1.指向结构体变量的指针
可以定义一个结构体类型的指针来指向结构体变量,定义格式为:
(
struct
结构体类型名 *指针名=&结构体变量名
;
)
若有一个结构体型指针指向一个结构体变量,则使用该指针表示结构体变量中的各成员可以表示为:
(
(*指针名).成员名
)
这里“(*指针名)”等价于“结构体变量名”。但因为“.”的运算优先级别高于“*”,所以必须将“*指针名”用圆括号括起来才行。
例如:
struct student s1,*p=&s1; /*定义student类型的变量s1和指针p,并将指针p指向变量s1*/
(*p).age=18; /*使用指针p为变量s1的成员age赋初值为18*/
如果在程序中大量使用指针来表示结构体变量中的各成员,书写很麻烦。这时就引入了另一个运算符——间接成员运算符(->)。运算符“->”由减号和大于号构成,是一个运算符,称为“指向运算符”,它的优先级和“.”一样,属于优先级最高的运算符。指向运算符的左侧必须是结构体类型数据的指针。通过指向结构体变量的指针来访问结构体变量的成员,与直接使用结构体变量的效果一样。
间接成员运算符“->”的左边是一个结构体指针变量,右边是所指结构体的一个成员名。间接引用结构体变量成员的一般格式如下:
(
指针名->成员名
)
例如上面语句可改写为:
p->age=18; /*与语句(*p).age=18;等价*/
若程序中大量使用指针表示结构体的各成员信息,基本都使用这种间接引用方式表示所指成员。
一般地说,如果指针变量已指向结构体变量,则可以用以下三种形式访问结构体变量的成员:
(1)结构体变量.成员 (2)指针变量->成员 (3)(*指针变量).成员
2.指向结构体数组的指针
指向结构体类型数组的指针也可以像普通指针一样进行各种运算,指针前后移动等,定义指向结构体数组的指针格式如下:
(
struct
结构体类型名 *指针名=结构体数组名
;
)
例如,下面程序段实现了使用指针对结构体数组的各元素的成员从键盘赋值的功能:
int i;
struct student stu[30] , *p=stu; /*定义结构体数组stu和指针p,并将p指向数组的首地址*/
for(i=0;i<30;i++) /*循环从键盘读入每个学生的信息*/
{
scanf("%s%s%d%s%s%s%s",p->number,p->name,&p->age,p->sex,p->nation,p->mobile,p->address);
p++; /*指针p后移到下一个元素上*/
}
使用结构体指针指向结构体数组要注意以下两点。
(1)如果p的初值为stu,即指向第一个元素,则p加1后p就指向下一个元素的地址。例如:
(++p)->name /*是先使p自加1(后移),然后得到它指向的元素中的name成员值*/
(p++)->name /*是先得到p->name的值,然后使p自加1(后移),指向stu[1]*/
(2)程序定义p是指向该结构体类型的指针,即p在自加或自减时都是指向结构体数组中每个元素的首地址,则不能将该指针指向结构体的该元素内的某一成员。
小结:
本次课我们通过习题巩固了结构体基本知识、结构体数组、结构体指针在习题中的应用,希望大家能够熟练掌握。
备 注
结构体是一种变量类型,我们可以定义各种类型的数组,当然也可以定义结构体的数组。
结构体在指针中的应用。如何使用指针间接引用结构体中的数据。
学科网(北京)股份有限公司
$$