指向结构体数组的指针
时间: 2025-07-24 13:09:44 浏览: 0
在C语言中,指向结构体数组的指针是一种非常有用的工具,它允许通过指针访问和操作结构体数组中的元素。通过指针访问结构体成员时,可以使用 `->` 运算符,也可以使用 `(*pointer).member` 的形式。结构体指针的使用方式与普通数组指针类似,因为结构体数组的元素是连续存储的,可以通过指针算术来遍历数组。
在提供的代码中,定义了一个 `struct student` 类型的数组 `stu[3]`,并声明了一个指向该结构体类型的指针 `p`。在 `for` 循环中,`p` 被初始化为指向数组的起始位置 `stu`,然后通过 `p < stu + 3` 控制循环的结束条件,每次循环中使用 `p++` 将指针移动到下一个结构体元素的位置。在循环体内,通过 `p->num`、`p->name`、`p->age` 和 `p->score` 来访问结构体成员,并将其打印出来[^1]。
结构体指针的另一种常见用法是将其指向结构体数组的某个特定位置,从而实现类似数组下标的功能。例如:
```c
struct student a[3];
struct student *p = a;
```
此时,`p` 指向数组 `a` 的第一个元素,可以通过 `p[0]`、`p[1]` 和 `p[2]` 来访问数组中的各个结构体元素。同样,也可以使用 `(*(p + i)).member` 来访问结构体成员,其中 `i` 是数组索引值[^3]。
### 示例代码
以下是一个完整的示例代码,展示了如何使用指向结构体数组的指针:
```c
#include <stdio.h>
struct student {
int num;
char name[20];
int age;
int score;
};
int main() {
struct student stu[3] = {
{101, "feifie", 18, 99},
{102, "baibai", 19, 89},
{103, "xixi", 18, 76}
};
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 99
102 baibai 19 89
103 xixi 18 76
```
### 使用结构体指针访问数组元素的多种方式
除了使用 `p->member` 的方式访问结构体成员,还可以使用以下方式:
- `(*p).member`:先对指针进行解引用,然后使用点号 `.` 访问成员。
- `(*(p + i)).member`:访问指针偏移 `i` 个位置后的结构体成员。
例如:
```c
for (int i = 0; i < 3; i++) {
printf("%5d%10s%4d%10d\n", (*(p + i)).num, (*(p + i)).name, (*(p + i)).age, (*(p + i)).score);
}
```
这与使用 `p[i].num` 的方式是等价的。
### 总结
指向结构体数组的指针可以像普通数组一样进行遍历和访问。通过指针算术和成员访问运算符(`->` 或 `(*pointer).member`),可以高效地操作结构体数组中的元素。这种技术在处理结构化数据时非常有用,例如在处理学生信息、员工记录等场景中[^1]。
---
阅读全文
相关推荐


















