📦 C++ 结构体与联合体 · 课前预习笔记
> 明天要学的东西叫 “结构体”和“联合体” ——说白了就是让程序把一堆相关的数据打包成一个新类型,比如一个学生的姓名、年龄、成绩,可以打包成“学生类型”,用起来特别方便!
一、先搞懂:为什么需要结构体?
1. 没有结构体的时候有多麻烦?
假设你要存一个学生的信息:姓名、年龄、身高、3门课成绩。
如果存3个学生呢?变量多到爆炸!😭
2. 有结构体之后多爽!
> 💡 结构体 = 把多个不同类型的变量打包成一个新类型,就像把散装零件组装成一个完整的工具箱。
二、结构体的定义与使用
1. 怎么定义结构体?
语法格式:
例子:定义一个“学生”类型
> ⚠️ 注意:结构体定义最后的 ; 不能少!这是初学者最容易忘的。
2. 怎么用结构体?
① 定义结构体变量
② 访问结构体成员(用 . 点号)
> 💡 记住:用 . 来访问结构体里的成员,就像“打开盒子拿东西”。
3. 完整例子
三、结构体数组
1. 什么是结构体数组?
> 结构体数组 = 数组的每个元素都是一个结构体,比如存50个学生,每个学生都有姓名、年龄、成绩。
2. 怎么定义和使用?
3. 完整例子
四、结构体排序(⭐⭐⭐⭐⭐ 重点!)
1. 为什么要对结构体排序?
> 很多时候我们需要按某个规则对结构体数组排序,比如:
>
> * 按成绩从高到低排名
> * 按年龄从小到大排队
> * 按姓名拼音排序
2. 用 SORT + 自定义比较函数
结构体排序最常用的方法:自己写一个比较函数,告诉 sort 怎么比大小。
3. 多种排序规则
五、结构体应用综合练习
题目:成绩排名系统
> 输入 n 个学生的姓名、语文、数学、英语成绩,要求:
>
> 1. 计算每个学生的总分
> 2. 按总分从高到低排名
> 3. 输出排名结果
完整代码
输入:
输出:
六、联合体(了解)
1. 什么是联合体?
> 联合体(union) 和结构体很像,但所有成员共用同一块内存,同一时间只能存一个成员的值。
用大白话说:联合体就是一个“变形金刚”,同一时间只能变一种形态。
2. 怎么定义和使用?
3. 结构体 VS 联合体
对比项 结构体 struct 联合体 union 内存分配 每个成员单独占内存(加起来) 所有成员共享一块内存(取最大的) 同时使用 所有成员可以同时使用 同一时间只能用一个成员 大小 所有成员大小之和(+对齐) 最大成员的大小 适用场景 存多个相关数据 存一种类型的数据(节省内存)
4. 什么时候用联合体?
场景 说明 节省内存 嵌入式系统、硬件编程 变体类型 一个变量可能存不同类型的数据 数据解析 把同一块内存用不同的方式解读
> 💡 了解即可,竞赛和日常编程中,联合体用得不多。重点掌握结构体!
📝 快速记忆卡
概念 一句话总结 结构体 把多个不同类型的变量打包成一个新类型 定义结构体 struct 类型名 { 成员列表 }; 访问成员 用 . 点号,如 s.name = "张三"; 结构体数组 Student stu[1005]; 存多个学生 结构体排序 写 cmp 函数,用 sort() 排 自定义比较 bool cmp(Student a, Student b) { return a.score > b.score; } 联合体 所有成员共用一块内存,同一时间只能用一个
🔥 预习小任务
1. 如果让你定义一个“图书”结构体,包含:书名、作者、价格、出版年份,你会怎么写?
2. 结构体排序中,cmp 函数为什么要写成 a.score > b.score 而不是 a.score < b.score?
3. 结构体和联合体最大的区别是什么?
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
明天上课带着这些问题来,效果翻倍!🚀