4
结构体
GESP 四级 · 知识点 3

📇 结构体

一个人的名字、年龄、分数是好几样信息,分开存很容易弄丢。结构体就像一张「空白信息表」:先画好格子,再照着填,一个人一张表,整整齐齐。

考纲知识点:结构体定义和使用,结构体数组,结构体指针,结构体嵌套结构体,结构体做函数参数,结构体中const 使用场景
📖
考纲 · 知识点详述
摘自《CCF编程能力等级认证 C++&Python 认证标准》C++ 四级
(2) 为考纲同一条目,同束结构体与多维数组两知识块
  1. (2)掌握C++结构体、二维及多维数组(不包括变长数组)的基本概念及使用。
📚
先学一学
花 5 分钟读完下面 5 课,再去闯关就不慌啦
1
💼 为什么需要结构体:把零散信息打包

要记录全班同学,每个人有名字、年龄、分数。如果分开存,得写三个数组:name[i]age[i]score[i],记到一半很容易对不上号。更棒的办法是先把「一个人有哪些格子」设计好,就像做一张空白名片模板:

🧪 读代码:设计「学生」名片模板
看得懂就好,不用背:
struct Student {
    string name;
    int age;
    int score;
};
struct 是「我要自定义一种类型」,Student 是给这种类型起的名字。它会记住姓名(字符串)和两个整数。
💡 口诀:struct = 画空白表格;结构体类型 = 会自己打包信息的新类型。
2
✍️ 用结构体:填表和用「点」取格子

模板画好了,现在给小明填一张:先声明一个 Student 类型的变量,再用点号 . 一个格子一个格子地填。

🧪 读代码:填小明这张表
看得懂就好,不用背:
Student x;
x.name = "小明";
x.age = 10;
x.score = 95;
cout << x.name << " " << x.score;
最后会输出 小明 95x.name 读作「x 这张表的 name 栏」,点号就是打开表格看某一栏。
💡 口诀:声明变量 = 拿一张空白表;x.name = 填或看 name 那一栏。
3
👥 结构体数组:一沓名片 = 全班同学

一张表只装一个人,全班 40 人怎么办?把结构体装进数组!Student c[40] 就是「一沓 40 张的名片」。每个同学用一个下标,再用点取他/她的某一栏:

🧪 读代码:第 3 位同学
看得懂就好,不用背:
Student c[40];
c[2].name = "小红";
c[2].score = 100;
cout << c[2].score;
先找下标(第 3 位同学是 c[2],下标从 0 数),再用点找那一栏。输出 100
💡 口诀:结构体数组 = 一沓名片;先 [下标] 再 .栏名。
🧩 结构体嵌套结构体:表里还能放表
如果每张名片还想写上「家庭住址」,而住址自己也有省、市两个格子,就可以先定义 struct Address,再在 Student 里放一个 Address addr;。填的时候用两个点:x.addr.city = "北京"
💡 口诀:结构体里可以再放结构体;多点几下点,一层层打开格子。
4
🎯 结构体指针 & 做函数参数
📍 结构体也能用指针:用 -> 箭头
看得懂就好,不用背:
Student x;
Student* p = &x; // p 记下 x 的门牌号
p->score = 99; // 等价于 (*p).score = 99
cout << p->score;
指针找结构体里的栏,用箭头 ->(左边是指针,右边是栏名),比写 (*p).score 更顺手。
💡 口诀:普通变量用点 .,结构体指针用箭头 ->;两个都在「取这一栏」。
📨 结构体做函数参数:把整张表递给函数
函数需要知道同学的信息时,可以直接把整张表当参数传进去,例如 void show(Student s)。如果函数只是看看分数、不改表格,就在参数前加 constvoid show(const Student& s),像借书时约定「只看不画」。这能防止不小心改坏原表,还更省时间。
💡 口诀:结构体可整表传参;只读不写时加 const,像「只看不画」的约定。
5
🌟 行业实际:数据库的一行 & 游戏的角色卡
💾 真实世界的结构体
通讯录里的「一条联系人」有姓名、电话、生日;游戏角色有名字、血量、金币、等级;点外卖的「一单」有地址、电话、菜品清单。它们都是一堆不同种类的信息绑在一起,C++ 就用结构体来装,就像把散落的卡片装进同一个文件袋。
💡 口诀:凡是「好几样信息属于同一个东西」,就给它做一个结构体。
🆚 易混对比:数组 vs 结构体
· 数组int a[5],装同一种类型的一串数据,用下标找。
· 结构体Student x,把不同种类型(名字、年龄、分数)绑成一份,用点找栏。
一个小口诀:数组 = 一串同类;结构体 = 一包异类。
💡 口诀:数组一串同类、结构体一包异类;数组用下标、结构体用点。
🎯
闯关小锦囊 · 考点提醒
🎮
学完了?来闯关!
下面 15 个小挑战,点一点就能玩

Demo 原型 · 每个知识点独立页面 · 暂不含真实编译与进度存储。