Skip to content

C 语言程序设计(二)—— Lecture 3

这一讲从“数据在内存里怎样摆放”出发,依次讲清结构体、内存对齐、指针、大小端、中断与回调函数,最后在 STM32F103C8T6 上完成从轮询到中断驱动的“点灯大师”实战。


课件

全屏打开课件

操作提示:点击课件后,用 ← → 或 空格 翻页;Esc 打开总览;F 全屏。随堂小测可以直接点选答案。


课件大纲

章节 内容
1. 结构体 结构体的用途、定义与初始化、成员访问、typedef、结构体数组、嵌套结构体与结构体指针
2. 内存对齐 成员对齐、尾部填充、成员顺序对空间的影响、sizeof、offsetof、#pragma pack / __attribute__((packed)) 的写法、作用域、布局示例与未对齐访问风险
3. 指针 地址、取地址与解引用、指针与数组、const 的四种写法、函数指针、空指针/野指针/悬空指针
4. 大小端 多字节整数的字节顺序、运行时检测、网络字节序、协议拆包与避免未对齐访问
5. 中断与回调函数 轮询与中断、ISR 的工作边界、volatile、回调函数、STM32 HAL 的中断调用链
6. 点灯大师 轮询闪烁、定时器中断、按键外部中断、回调驱动灯效、排错清单(LED 电路与 CubeMX 工程配置沿用 Lecture 1 小作业)

练习

  • 洛谷 P5740「最厉害的学生」:读取结构体数组,按总分选择记录。
  • 洛谷 P5744「培训」:批量修改结构体并输出。
  • 内存侦探:预测三种结构体成员顺序的 sizeof 与 offsetof,再运行程序验证。
  • 只用指针:实现 swap_int、reverse 与 max_element,函数体禁止使用下标。
  • 协议拆包器:从字节数组按大端解析 uint16_t 和 uint32_t,不得强制转换为整型指针。
  • 点灯大师:完成轮询闪烁、定时器闪烁、按键切换灯效三个等级。

洛谷题主要覆盖结构体的输入、处理与输出。内存布局、指针写法、大小端和中断依赖编译器或硬件环境,因此使用可在本机或开发板上验证的实验题。


配套资源


作者: Metalxiaoxiao | 修改日期: 2026-09-23