--- title: C++指针、引用与内存模型 tags: - module - cpp - pointer - memory - joplin type: module source_type: reconstructed created: 2026-04-22 updated: 2026-04-22 --- # C++指针、引用与内存模型 > [!abstract] > 这一模块是 C++ 区别于很多高级语言的关键。重点不是把语法记熟,而是理解地址、生命周期、所有权和内存区域的关系。 ## 模块结论 - [[C++指针]] 提供直接处理地址和间接访问内存的能力。 - [[C++引用]] 是别名机制,常用于参数传递和返回值设计。 - [[C++内存模型]] 决定了对象和数据位于哪里、活多久、谁负责释放。 ## 一、指针是什么 - 指针变量存放地址。 - 解引用可以访问对应内存。 - 指针让程序员直接面对内存布局和生命周期。 ### 高频内容 - 空指针与野指针 - `const` 修饰指针 - 指针与数组 - 指针与函数参数 ## 二、引用是什么 - 引用本质上是已存在对象的别名。 - 必须初始化,且不能重新绑定到另一对象。 - 它在语义上比裸指针更“像对象本身”。 ### 为什么引用重要 - 可替代一部分指针参数写法。 - 支撑函数重载、返回值优化相关设计。 - 是理解现代 C++ 接口风格的重要基础。 ## 三、内存四区模型 - 代码区 - 全局区 - 栈区 - 堆区 ### 复习重点 - 栈区由编译器自动管理。 - 堆区通常由程序员通过 `new/delete` 管理。 - 局部变量地址不能随意返回,是生命周期问题而不是语法问题。 ## 四、`new` 与 `delete` - `new` 在堆区申请空间并返回指针。 - `delete` / `delete[]` 负责释放。 - 这直接牵涉资源管理和内存泄漏问题。 ## 五、易错点 - 指针存的是地址,不是值本身。 - 空指针、野指针不能随意解引用。 - 引用不是“更安全的指针语法糖”这么简单,它有独立语义边界。 - `delete` 与 `delete[]` 不能混用。 ## 六、复习提问 - 指针和引用的核心区别是什么? - 为什么不能返回局部变量地址? - 栈区和堆区分别适合承载什么生命周期的数据? ## 来源 - [[raw/Joplin/编程学习项目/C++学习笔记/1. C++基础/7. 指针.md]] - [[raw/Joplin/编程学习项目/C++学习笔记/2. C++核心编程/1. 内存分区模型.md]] - [[raw/Joplin/编程学习项目/C++学习笔记/2. C++核心编程/2. 引用.md]] ## 相关页面 - [[C++]] - [[C++引用]] - [[C++指针]] - [[C++内存模型]] - [[C++智能指针]]