结构体数组
结构体数组
一句话理解:结构体是描述一个对象的模板,结构体数组就是批量存放多个同类型对象。 比如:一个学生信息是结构体,全班几十个学生,就用结构体数组保存。
1. 结构体基础回顾(C 语言)
// 定义结构体类型:学生
struct Student
{
int id; // 学号
char name[20]; // 姓名
float score; // 分数
};
struct Student 是类型,就像 int,只不过是我们自定义的类型。
2. 定义结构体数组
方式 1:先定义结构体,再定义数组
struct Student stu[3]; // 结构体数组,存放3个学生
stu是数组名,数组有 3 个元素:stu[0]、stu[1]、stu[2]- 每个元素都是
struct Student结构体变量
方式 2:定义结构体同时定义数组
struct Student
{
int id;
char name[20];
float score;
} stu[3];
3. 结构体数组初始化
struct Student stu[3] = {
{1001, "Zhang", 90.5},
{1002, "Li", 88.0},
{1003, "Wang", 95.0}
};
外层大括号代表数组,里面每一对
{}对应一个结构体成员。
也可以部分初始化,没写的成员自动置 0:
struct Student stu[3] = {
{1001, "Zhang", 90.5},
};
4. 访问结构体数组成员
语法:数组下标.成员名
stu[0].id = 1001;
stu[0].score = 92;
printf("%d %s %.1f\n", stu[0].id, stu[0].name, stu[0].score);
⚠️ 重点区分:
.结构体变量访问成员->结构体指针访问成员
5. 完整示例代码(C)
#include <stdio.h>
struct Student
{
int id;
char name[20];
float score;
};
int main(void)
{
// 结构体数组
struct Student stu[3] = {
{1001, "Zhang", 90.5},
{1002, "Li", 88.0},
{1003, "Wang", 95.0}
};
// 遍历结构体数组
for(int i = 0; i < 3; i++)
{
printf("学号:%d 姓名:%s 分数:%.1f\n",
stu[i].id, stu[i].name, stu[i].score);
}
return 0;
}
6. 结构体数组 + 结构体指针(高频考点)
数组名本身就是首元素地址。 stu 等价于 &stu[0],类型是 struct Student *
struct Student *p = stu;
// 两种写法等价
printf("%d", p->id);
printf("%d", stu[0].id);
p++; // 指针向后移动一个结构体大小,指向stu[1]
p++不是移动 1 字节,是移动整个结构体占用的字节数!
7. 常用场景
- 保存多条同类数据:学生、员工、设备参数、坐标点
- 串口解析多组数据、存储多个传感器信息(嵌入式 MCU 非常常用)
8. C++ 写法(简单对比)
C++ 可以不用写struct:
struct Student
{
int id;
char name[20];
float score;
};
Student stu[3];
9. 常见坑
- 混淆
.和->:变量用.,指针用-> - 字符串不能直接
stu[0].name="aaa",要用strcpy - 结构体数组作为函数参数,传递的是结构体指针,会共享原数据

浙公网安备 33010602011771号