单片机/C/C++八股:(十七)C++ 中指针和引用的区别

上一篇 下一篇
C 中 malloc/free 和 C++ 中 new/delete 有什么区别?

C++ 中指针和引用的区别

指针(Pointer)和引用(Reference)是 C++ 中两种用于间接访问对象的机制,但它们在本质、行为和使用规则上有根本区别。

  1. 本质不同:

    • 指针:是一个变量 ,存储的是另一个变量的内存地址

    • 引用:是某个变量的别名(alias),不是独立对象,不占用额外存储空间(编译器通常用指针实现,但语义上不是指针)。

  2. 符号不同:

    • 指针:用 *

    • 引用:用 &

  3. 初始化要求:

    • 指针:可以不初始化(但使用前必须赋值),可指向 nullptr

    • 引用:必须在定义时初始化 ,且不能为 null,一旦绑定就不能更改。

  4. 可变性(是否可重新赋值):

    • 指针:可以改变指向(即可以指向其他对象)。

    • 引用:一旦绑定,终身不变,不能重新绑定到其他对象。

  5. 空值(null)支持:

    • 指针:可以为 nullptr(或 NULL)。

    • 引用:不能为 null,不存在"空引用"。

  6. sizeof 结果:

    • sizeof(指针):返回指针本身的大小(如 8 字节 on 64-bit)。

    • sizeof(引用):返回被引用对象的大小,因为引用就是别名。

  7. 作为函数参数:

    • 指针传参:传递的是地址的拷贝,可通过解引用修改原变量。

    • 引用传参:直接操作原变量,语法更简洁、安全(无空指针风险)。


相关推荐
sycmancia4 分钟前
Qt——对话框及其类型
开发语言·qt
趙卋傑10 分钟前
测试开发场景下常见的 MCP 服务
开发语言·python·测试工具·ai编程
@atweiwei10 分钟前
langchainrust:Rust 版 LangChain 框架(LLM+Agent+RAG)
开发语言·rust·langchain·agent·向量数据库·rag
阿里嘎多学长12 分钟前
2026-04-11 GitHub 热点项目精选
开发语言·程序员·github·代码托管
yugi98783812 分钟前
基于最大信息熵的粒子群优化算法图像分割(MATLAB实现)
开发语言·算法·matlab
yaoxin52112313 分钟前
376. Java IO API - 使用 Globbing 和自定义 Filter 过滤目录内容
java·开发语言·python
Mr YiRan15 分钟前
JNI技术之手写JNIEnv与静态缓存与native异常
java·c++
菠萝地亚狂想曲20 分钟前
FreeRTOS heap4
c语言·stm32·嵌入式开发
飞翔的SA21 分钟前
全程 Python:无需离开 Python 即可实现光速级 CUDA 加速,无需c++支持
开发语言·c++·python·nvidia·cuda
计算机安禾22 分钟前
【数据结构与算法】第40篇:图论(四):最短路径——Dijkstra算法与Floyd算法
c语言·数据结构·算法·排序算法·哈希算法·图论·visual studio