一、问题
在使⽤数组时,可以⽤指向数组或数组元素的指针和指针变量。同样,在结构体类型的数组及其元素中也可以应⽤指针或指针变量来指向。具体怎么应⽤呢?
二、解答
在如下代码中实现指向结构体数组的指针的应⽤。
#include <stdio.h>
struct student
{int num;char name[20];int age;int score;
};
struct student stu[3] = {{101, "feifie", 18, 99}, {102, "baibai", 19, 89}, {103, "xixi", 18, 76}};
int main()
{struct student *p;printf("学号\t姓名\t年龄\t平均分成绩\t\n");for (p = stu; p < stu + 3; p++){printf("%5d%10s%4d%10d\n", p->num, p->name, p->age, p->score);}return 0;
}
程序运⾏结果如下所示。
学号 姓名 年龄 平均分成绩101 feifie 18 99102 baibai 19 89103 xixi 18 76
在上述代码中,p 是指向 struct student 结构体类型的指针,stu[3] 是定义的结构体类型的数组,数组内包含三个学⽣的信息,在全局变量中为数组 stu[3] 赋初值。在 for 语句中, 先使 stu 数组的⾸地址赋给 p,然后在数组范围内遍历 p,每循环⼀次,p ⾃加1。在执⾏了p++后,p 的值就等于 stu+1 ,就是数组 stu[1] 的地址。在循环中执⾏ p++ ,直到,指向的值变为 stu+3 处的值,就不再执⾏循环体,⽽跳出循环,输出结束。
三、总结
在实现输出指向结构体数组的指针的应⽤中,需要注意如果 p 的初值为 stu ,即数组的⾸地址,则 p+1后 p 就指向下⼀个元素的起始地址。同时也要注意,在程序中⼰经定义了 p 是⼀个指向结构体类型的指针变量,不应⽤来指向 stu 数组元素中的某⼀成员,也就不可以写成此形式:p=stu[2].score。