L8.2 - 递归&指针深度解析(拓展)
L8.2 - 递归&指针深度解析(拓展)
🎯 教学目标
- 掌握递归核心原理:理解调用栈机制与递归三要素
- 精通指针操作技巧:从内存层面理解程序运行机制
- 规避递归与指针陷阱:识别常见错误模式
- 开发复杂数据结构:实现链表、树等递归结构
📚 核心知识点
一、递归核心原理
1. 递归三要素
1 | int factorial(int n) { |
二、指针操作全景
1. 指针类型体系
类型 | 示例 | 内存示意图 |
---|---|---|
裸指针 | int* p = &a; |
[a地址] → 42 |
双指针 | int** pp = &p; |
[pp地址] → [p地址] → 42 |
函数指针 | void (*fp)(int); |
指向函数入口地址 |
智能指针 | unique_ptr<int> up; |
自动管理生命周期 |
2. 指针运算本质
1 | int arr[5] = {10,20,30,40,50}; |
💡 实战应用场景
1. 递归链表处理
1 | struct Node { |
2. 多级指针应用
1 | void allocateMatrix(int*** matrix, int rows, int cols) { |
💣 深度陷阱解析
1. 递归栈溢出
1 | // 危险代码:无终止条件的递归 |
2. 指针悬挂引用
1 | int* dangerPointer() { |
🧩 进阶训练系统
1. 递归分形生成
1 | void drawTree(Point start, double angle, int depth) { |
2. 智能指针实践
1 | class TreeNode { |
🔍 调试技巧宝典
1. 递归调用追踪
1 | void recurDebug(int n, int depth=0) { |
2. 指针有效性检测
1 | template<typename T> |
📊 性能优化指南
1. 尾递归优化
1 | // 传统递归 |
2. 指针别名优化
1 | void processData(int* a, int* b, int size) { |
🛠️ 拓展模块:逆向工程基础
1. 函数指针实战
1 | // 回调函数示例 |
2. 内存布局分析
1 | struct Complex { |
评论