本讲定位:四级新增的”打包”能力。2026 年 3 月四级真题中,第 6 题(结构体初始化写法)、第 7 题(结构体嵌套结构体 + 结构体数组)连着两道,共 4 分。结构体本身不难,但官方大纲把它拆成了 6 个子知识点,考得很细,必须逐条讲到。
对应官方大纲:四级知识块 3「结构体」——结构体定义和使用、结构体数组、结构体指针、结构体嵌套结构体、结构体做函数参数、结构体中 const 使用场景。
前置知识:第 01 讲(参数传递)、第 02 讲(指针)。
代码说明:本讲代码均已用 g++ 11.5(
-std=c++11)编译运行验证。
假设要记录 50 个学生的姓名、语文、数学、总分。用平行数组是这样:
string name[50];
int chinese[50], math[50], total[50];
问题来了:现在要按总分排序。你得同时交换四个数组的对应元素,漏一个数据就全乱了。而且传给函数要传四个参数,加一个”英语”成绩就要改到处的代码。
结构体的作用:把描述同一个事物的多个数据”捆”成一个整体。
struct Student {
string name;
int chinese, math, total;
};
Student stu[50]; // 一个数组搞定,交换时整体交换,绝不会错位
一句话:数组是”很多个同类型的东西”,结构体是”一个东西的很多个属性”。 两者组合起来(结构体数组)就是 GESP 编程题最常用的数据组织方式。
struct Point { // Point 是【类型名】,首字母大写是惯例
int x; // x、y 叫【成员】(member) 或【域】(field)
int y;
}; // ⚠️ 这个分号绝对不能少!
⚠️ 最高频的低级错误:结构体定义末尾漏掉分号,编译器会报一堆莫名其妙的错误。让学生养成”写完右花括号先补分号”的习惯。
定义结构体只是”造了一个新类型”,不占内存,就像 int 这个词本身不占内存一样。
Point p; // 定义一个 Point 类型的变量
p.x = 3; // 用【点运算符 .】访问成员
p.y = 4;
cout << p.x << " " << p.y; // → 3 4
C++ 里 struct 后面直接写类型名即可(C 语言要写 struct Point p;,C++ 简化了)。