- 1
- 0
- 约1.46万字
- 约 76页
- 2019-09-06 发布于广东
- 举报
9.3.2 指向结构体数组的指针 11.6.2 指向结构体数组的指针 例9.4 指向结构体数组元素的指针的应用 #include stdio.hstruct student{int num;char name[20];char sex;int age;};struct student stu[3]={{10101,″Li Lin″,′M′,18},{10102,″Zhang Fun″,′M′,19},{10104,″WangMing″,′F′,20}};void main(){ struct student *p; printf(″ No. Name sex age\n″); for (p=str;p<str+3;p++) printf(″%5d %-20s %2c %4d\n″,p-num, p-name, p-sex, p-age); } 运行结果: No. Name sex age 10101 LiLin M 18 10102 Zhang Fun M 19 10104 WangMing F 20 9.3.2 指向结构体数组的指针 程序分析: p是指向struct student结构体类型数据的指针变量。在for语句中先使p的初值为stu,也就是数组stu第一个元素的起始地址。在第一次循环中输出stu[0]的各个成员值。然后执行p++,使p自加1。p加1意味着p所增加的值为结构体数组stu的一个元素所占的字节数。执行p++后p的值等于stu +1,p指向stu[1]。在第二次循环中输出stu[1]的各成员值。在执行p++后,p的值等于stu+2,再输出stu [2]的各成员值。在执行p++后,p的值变为stu +3, 已不再小于stu+3了,不再执行循环。 图9-8 9.3.2 指向结构体数组的指针 注意: (1) 如果p的初值为stu,即指向第一个元素,则p加1后p就指向下一个元素。例如: (++p)-num 先使p自加1,然后得到它指向的元素中的num成员值(即10102)。 (p++)-num 先得到p-num的值(即10101),然后使p自加1,指向stu[1]。 请注意以上二者的不同。 9.3.2 指向结构体数组的指针 注意: (2) 程序已定义了p是一个指向struct student类型数据的指针变量,它用来指向一个struct student类型的数据,不应用来指向stu数组元素中的某一成员。 例如: p=stu[1].name; 如果要将某一成员的地址赋给p,可以用强制类型转换,先将成员的地址转换成p的类型。 例如:p=(struct student *)stu[0].name; ? §9.3 结构体指针 9.3.3 结构体变量和指向结构体的指针作函数参数 将一个结构体变量的值传递给另一个函数,有3个方法: 用结构体变量的成员作参数。 (2) 用结构体变量作实参。 (3) 用指向结构体变量(或数组)的指针作实参,将结构体变量(或数组)的地址传给形参. §9.3 结构体指针 11.6.2 指向结构体数组的指针 例9.5 有一个结构体变量stu,内含学生学号、姓名和3门课程的成绩。要求在main函数中赋予值,在另一函数print中将它们输出。今用结构体变量作函数参数。 #include stdio.h struct student { int num; char name[20]; float score[3]; }; §9.3 结构体指针 void main(){ void print(struct student); struct student stu; stu.num=12345;strcpy(, ″LiLin″;stu.score[0]=67.5;stu.score[1]=89;stu.score[2] =78.6); print(stu);}void print(struct student stu){ printf(FORMAT,stu.num,, stu.score[0], stu.score[1],stu.score[2]); pr
原创力文档

文档评论(0)