内容正文:
第9章 结构体、共用体与枚举类型
本章内容
9.1结构体类型的定义
9.2结构体变量
9.3结构体数组
9.4结构体类型指针
9.5结构体与函数
9.6链表
9.7共用体类型
9.8枚举类型
9.9类型定义
9.10综合案例
9.4结构体类型指针
9.4.1指向结构体变量的指针
结构体指针变量的定义
结构指针变量定义的一般形式为:
struct 结构体名 *结构指针变量名;
例如:struct student *pstu,student1; pstu=&student1;
结构体指针变量的使用
结构体指针变量访问结构体的一般形式为:
(*结构体指针变量).成员名
或
结构指针变量->成员名
例如:
(*pstu).num
或
pstu->num
程序举例
【例9.4】利用结构体变量和结构体指针变量输出结构体内容
struct student
{
int num;
char name[20];
char sex;
int age;
float score;
char addr[40];
}student1={102,"Zhang ping",'M',20,78.5, "Beijing"},*pstu;
main()
{
pstu=&student1;
printf("Num=%d
",student1.num);
printf("Name=%s
",student1.name);
printf("Sex=%c
",student1.sex);
printf("age=%d
",student1.age);
printf("Num=%d
",(*pstu).num);
printf("Name=%s
",(*pstu).name);
printf("Sex=%c
",(*pstu).sex);
printf("age=%d
",(*pstu).age);
printf("Num=%d
",pstu->num);
printf("Name=%s
", pstu->name);
printf("Sex=%c
", pstu->sex);
printf("age=%d
", pstu->age);
}
9.4.2指向结构体数组的指针
例子:
struct student stu [4],*p;
p = stu;
p是指向一维结构体数组的指针,对数组元素的引用可采用三种方法
地址法
(stu+i)-> name、(stu+i)->num
或
(p+i)->name、(p+i)->num等。
指针法
若p指向数组stu的某一个元素,则p++指向数组的下一元素。
指针的数组表示法
若p=stu,对数组成员的引用可以描述为:p[i].name、p[i].num等,这与stu[i].name、stu[i].num是等价的。
程序举例
【例9.5】每个同学有3门课程的成绩,共有5个同学,分别计算每个同学的平均成绩并输出。
#include <stdio.h>
struct score
{
int num;
char name[20];
float sc[3];
};
main()
{
struct score s[5]={
{1001,"Li Lin",{50,70,90}},
{1002,"Zhao Mei",{70,80,90}},
{1003,"Liu Li",{60,70,80}},
{1004,"Zhang Yan",{50,70,60}},
{1005,"Sun Jing",{60,80,90}}
};
struct score *p;
float avg[5];
int i,j;
float t;
p=s; /*指向数组的首地址*/
for(i=0;i<5;i++)
{
t=0;
for(j=0;j<3;j++) /*计算每个同学的3门课程成绩的和*/
t+=(p+i)->sc[j];
avg[i]=t/3; /*计算平均成绩,并保存到数组avg[i]中*/
}
for(i=0;i<5;i++)
printf("%d\t%-20s\t%.1f
",(p+i)->num ,(p+i)->name ,avg[i]);
}
9.5结构体与函数
9.5.1结构体变量作为函数参数
在传送结构体类型的参数时,系统将实参结构体变量的所有成员的值传递给形参结构体变量
【例9.6】将例9.5改为用函数计算某个同学的平均成绩,然后在main函数中调用该函数计算所有同学的平均成绩。
#include <stdio.h>
struct score
{
int num;
char name[20];
float sc[3];
};
float