指针是变量,存储地址,可为空、可重定向;引用是别名,必须初始化且不可变。2. 指针占内存,有独立地址;引用无额外内存占用。3. 指针需用*解引用;引用直接访问原变量。

指针和引用在C++中都用于间接访问变量,但它们在语法、使用方式和底层机制上有明显区别。理解这些差异对掌握C++内存管理和函数参数传递至关重要。
1. 定义与初始化
指针是一个变量,存储的是另一个变量的地址。它可以在声明时不初始化,也可以在后续重新赋值指向不同的对象。
- 指针可以为空(nullptr) - 可以多次改变指向 - 声明时不需要立即初始化例如:
int a = 10;int* ptr = &a; // 指针指向a
ptr = nullptr; // 指针可以被设为空
引用是某个已存在变量的别名。它必须在声明时初始化,且一旦绑定就不能再指向其他变量。
立即学习“C++免费学习笔记(深入)”;
- 引用不能为空 - 必须初始化 - 绑定后无法更改目标例如:
int a = 10;int& ref = a; // ref是a的引用
// ref = b; 这不是让ref引用b,而是把b的值赋给a(通过ref)
2. 内存占用与地址操作
指针本身是一个独立的变量,会占用内存空间(通常是8字节,64位系统),有自己的地址。
引用并不分配新的内存空间,它只是原变量的别名,通常由编译器用指针实现,但对程序员透明。
- &ptr 获取指针本身的地址- &ref 获取的是原变量的地址(ref只是别名)
3. 解引用方式
指针访问目标值需要显式解引用,使用 * 操作符。
int* ptr = &a;cout
引用无需解引用,直接使用即可访问原变量。
int& ref = a;cout
4. 应用场景差异
指针常用于动态内存分配、数组操作、链表等数据结构,以及可选参数(允许为空)。
- new/delete 配合指针使用- 函数参数可接受空指针表示“无值”
引用多用于函数参数和返回值,避免拷贝,提高效率,同时保证不会为空。
- 函数传参常用 const T& 避免复制大对象- 返回局部变量不能返回引用,但成员或静态变量可以
基本上就这些。指针更灵活但危险,引用更安全但受限。根据实际需求选择合适的方式。不复杂但容易忽略细节。











