C++指针、引用与内存模型.md 2.5 KB


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 管理。
  • 局部变量地址不能随意返回,是生命周期问题而不是语法问题。

四、newdelete

  • new 在堆区申请空间并返回指针。
  • delete / delete[] 负责释放。
  • 这直接牵涉资源管理和内存泄漏问题。

五、易错点

  • 指针存的是地址,不是值本身。
  • 空指针、野指针不能随意解引用。
  • 引用不是“更安全的指针语法糖”这么简单,它有独立语义边界。
  • deletedelete[] 不能混用。

六、复习提问

  • 指针和引用的核心区别是什么?
  • 为什么不能返回局部变量地址?
  • 栈区和堆区分别适合承载什么生命周期的数据?

来源

  • [[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++智能指针]]