📄 一句话概括
数组只能装同类型;结构体把几个相关的值(姓名+学号+分数)打包成一个单位——类的前身。
📝 本节和前面几节的关系
数组解决了【同类型一堆】的问题,这一节解决【不同类型的一组】——结构体。
一、数组装不下一个学生
描述一个学生:姓名(字符串)、学号(整数)、分数(小数)——三个字段三个类型,数组没法混装。 结构体的解法:把这几个相关的值打包成一个单位,起个名字(如 Student),之后整包创建、整包传递。 结构体里的每个值叫成员(字段);访问按字段名(st.score),不用记【第几格】。
二、结构体的力量:整包处理
打包后,【一个学生】成了一个整体:排序时整包换位、传参时整包传递、列表里可以装一整排学生。 对比散装写法(name1、id1、score1、name2……):变量名爆炸、一改全改——结构体是治这种混乱的第一剂药。 再配合数组:结构体数组=一排学生,整班管理就是这么来的。
三、从结构体到类
结构体只装数据。第七章的类=结构体+【挂在数据上的函数】——数据与操作合一。 所以本节是面向对象的桥头堡:先学会【把数据打包】,下一章再学【把行为也打包】。 【⚠️ 2026 现状】现代语言里结构体与类界限渐淡(Python 用 dict/class、Go 保留 struct),但【先打包再处理】的思想不变。
四、动手 Demo:结构体打包三个学生
用字典模拟结构体,打包三个学生并整包处理。
# 结构体(用字典模拟): 相关数据打包
st = {"name": "波仔", "id": 1, "score": 88}
st["score"] += 5
print(st["name"], st["score"])
# 结构体数组: 整班管理
students = [st, {"name": "小墨", "id": 2, "score": 95}]
best = max(students, key=lambda s: s["score"])
print("最高分:", best["name"])
实跑输出:
--------------------------------------------------------------------
要点 6——结构体:把相关的数据捆成一包
--------------------------------------------------------------------
数组只能装同类型。想描述一个学生(姓名+学号+分数)就要**结构体**:
把几个相关的值打包成一个单位。
姓名 学号 分数
-----------------------
波仔 1 88
小墨 2 95
阿池 3 79
打包后的好处——整包传递、整包处理:
最高分学生: 小墨 (学号 2, 95 分)
注意结构体的用法(代码示例):
st = {"name": "波仔", "id": 1, "score": 88}
st["score"] += 5 <- 按字段名取用, 不用记第几格
第六章的结构体,就是第七章面向对象里【类】的前身——
类=结构体+挂在上面的函数。
max(students, key=...) 一行找出最高分学生——整包处理的便利,散装写法做不到。 【结构体数组】这个名字起得很实在:数组的规矩+结构体的格子内容。
30 秒实验
- 给 Student 再加一个字段(如 age),体验【加字段只改一处】的打包好处。
- 对比:用三个平行数组(names[]、ids[]、scores[])管理三个学生,数一数要同步维护几处。
常见误区
- 以为结构体是另一种数组——它是【异类打包】,数组是【同类排队】。
- 以为类和结构体毫无关系——类=结构体+方法,第七章正式展开。
自测三问(点开对答案)
1. 结构体解决什么问题? —— 把不同类型的相关数据打包成一个单位,整包创建传递处理。 2. 结构体成员怎么访问? —— 按字段名(st.score),不必记位置。 3. 类与结构体的关系? —— 类=结构体(数据)+方法(函数)——第七章的主角。- ☐ 下一节(6.7 要点7:了解链表和二叉树的实现方法)
相关笔记
- 要点3:了解并应用典型算法 — 招式库与舞台的关系
- ☕ Java基础 · 索引 — 类与对象的实战在那边
- 💻 计算机是怎样跑起来的 · 索引