💻 第六章 与数据结构成为好朋友的七个要点
📄 一句话概括

数组只能装同类型;结构体把几个相关的值(姓名+学号+分数)打包成一个单位——类的前身。

📝 本节和前面几节的关系

数组解决了【同类型一堆】的问题,这一节解决【不同类型的一组】——结构体。

一、数组装不下一个学生

描述一个学生:姓名(字符串)、学号(整数)、分数(小数)——三个字段三个类型,数组没法混装。 结构体的解法:把这几个相关的值打包成一个单位,起个名字(如 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 秒实验

  1. 给 Student 再加一个字段(如 age),体验【加字段只改一处】的打包好处。
  2. 对比:用三个平行数组(names[]、ids[]、scores[])管理三个学生,数一数要同步维护几处。

常见误区

  1. 以为结构体是另一种数组——它是【异类打包】,数组是【同类排队】。
  2. 以为类和结构体毫无关系——类=结构体+方法,第七章正式展开。
自测三问(点开对答案) 1. 结构体解决什么问题? —— 把不同类型的相关数据打包成一个单位,整包创建传递处理。 2. 结构体成员怎么访问? —— 按字段名(st.score),不必记位置。 3. 类与结构体的关系? —— 类=结构体(数据)+方法(函数)——第七章的主角。

相关笔记