c++,指针与引用的区别
时间: 2024-09-23 12:04:26 浏览: 69
C++中的指针与引用
C++中的指针和引用有以下几点关键区别:
相同之处:
1. **基础概念**:两者本质上都是表示内存地址。指针可以被赋值为NULL(在C++11后通常用nullptr),而引用始终绑定到某个已存在的对象。
不同之处:
1. **声明方式**:
- **指针**:使用`*`操作符声明,如`int *ptr;`,它存储的是另一个变量的地址。
- **引用**:使用`&`操作符声明,如`int &ref;`,一旦引用初始化后,就不能改变引用的对象。
2. **赋值**:
- **指针**:可以通过`ptr = &var;`动态改变所指向的对象。
- **引用**:一旦初始化,就不能改变其绑定的对象,`ref = var;`实际上是改变了`ref`所代表的变量。
3. **空状态**:
- **指针**:可以是NULL/nullptr,表示未指向任何内存地址。
- **引用**:必须总是绑定到某个对象,不能是NULL。
4. **使用灵活性**:
- **指针**:可以在运行时改变所指向的对象,也可以传递指针作为参数,使函数能修改原对象。
- **引用**:不允许传递,一旦创建就固定不变,更适合用作函数参数以避免浅拷贝。
5. **内存管理**:
- **指针**:需要手动管理内存分配和释放,可能导致悬垂指针等问题。
- **引用**:隐式地关联着对象,不需要显式地释放,相对更安全。
示例:
```cpp
int x = 10;
int *ptr = &x; // ptr指向x
// 引用
int y = 20;
int &ref = x; // ref直接绑定到x
// 修改引用所关联的对象
ref = y; // x现在等于y,而不是指针
// 使用指针可以动态改变指向
ptr = &y; // ptr现在指向y
```
阅读全文