GESP 四级 第 03 讲:结构体

本讲定位:四级新增的”打包”能力。2026 年 3 月四级真题中,第 6 题(结构体初始化写法)、第 7 题(结构体嵌套结构体 + 结构体数组)连着两道,共 4 分。结构体本身不难,但官方大纲把它拆成了 6 个子知识点,考得很细,必须逐条讲到。

对应官方大纲:四级知识块 3「结构体」——结构体定义和使用、结构体数组、结构体指针、结构体嵌套结构体、结构体做函数参数、结构体中 const 使用场景

前置知识:第 01 讲(参数传递)、第 02 讲(指针)。

代码说明:本讲代码均已用 g++ 11.5(-std=c++11)编译运行验证。


1. 为什么需要结构体

假设要记录 50 个学生的姓名、语文、数学、总分。用平行数组是这样:

string name[50];
int chinese[50], math[50], total[50];

问题来了:现在要按总分排序。你得同时交换四个数组的对应元素,漏一个数据就全乱了。而且传给函数要传四个参数,加一个”英语”成绩就要改到处的代码。

结构体的作用:把描述同一个事物的多个数据”捆”成一个整体。

struct Student {
    string name;
    int chinese, math, total;
};

Student stu[50];        // 一个数组搞定,交换时整体交换,绝不会错位

一句话数组是”很多个同类型的东西”,结构体是”一个东西的很多个属性”。 两者组合起来(结构体数组)就是 GESP 编程题最常用的数据组织方式。


2. 结构体的定义与使用

2.1 定义

struct Point {      // Point 是【类型名】,首字母大写是惯例
    int x;          // x、y 叫【成员】(member) 或【域】(field)
    int y;
};                  // ⚠️ 这个分号绝对不能少!

⚠️ 最高频的低级错误:结构体定义末尾漏掉分号,编译器会报一堆莫名其妙的错误。让学生养成”写完右花括号先补分号”的习惯。

定义结构体只是”造了一个新类型”,不占内存,就像 int 这个词本身不占内存一样。

2.2 定义变量与访问成员

Point p;            // 定义一个 Point 类型的变量
p.x = 3;            // 用【点运算符 .】访问成员
p.y = 4;
cout << p.x << " " << p.y;      // → 3 4

C++ 里 struct 后面直接写类型名即可(C 语言要写 struct Point p;,C++ 简化了)。

2.3 初始化:真题第 6 题就考这个