| 上一篇 | 下一篇 |
|---|---|
| C 中 malloc/free 和 C++ 中 new/delete 有什么区别? |
C++ 中指针和引用的区别
指针(Pointer)和引用(Reference)是 C++ 中两种用于间接访问对象的机制,但它们在本质、行为和使用规则上有根本区别。
-
本质不同:
-
指针:是一个变量 ,存储的是另一个变量的内存地址。
-
引用:是某个变量的别名(alias),不是独立对象,不占用额外存储空间(编译器通常用指针实现,但语义上不是指针)。
-
-
符号不同:
-
指针:用
* -
引用:用
&
-
-
初始化要求:
-
指针:可以不初始化(但使用前必须赋值),可指向
nullptr。 -
引用:必须在定义时初始化 ,且不能为 null,一旦绑定就不能更改。
-
-
可变性(是否可重新赋值):
-
指针:可以改变指向(即可以指向其他对象)。
-
引用:一旦绑定,终身不变,不能重新绑定到其他对象。
-
-
空值(null)支持:
-
指针:可以为
nullptr(或NULL)。 -
引用:不能为 null,不存在"空引用"。
-
-
sizeof 结果:
-
sizeof(指针):返回指针本身的大小(如 8 字节 on 64-bit)。 -
sizeof(引用):返回被引用对象的大小,因为引用就是别名。
-
-
作为函数参数:
-
指针传参:传递的是地址的拷贝,可通过解引用修改原变量。
-
引用传参:直接操作原变量,语法更简洁、安全(无空指针风险)。
-