C++中的指针传递与引用传递有何不同?
时间: 2024-09-15 09:09:49 浏览: 12
在C++中,指针传递和引用传递有以下关键区别:
1. 指针传递[^2]:
- 指针本身作为参数传递,改变指针所指向的内容会影响原始变量。
```cpp
void changeValue(int* ptr) {
*ptr = 10; // 改变指针所指位置的值
}
int x = 5;
changeValue(&x); // x现在变为10
```
- 操作的是间接对象,而不是直接对象。
2. 引用传递:
- 引用是对象的别名,相当于直接传递对象本身。
```cpp
void changeValue(int& ref) {
ref = 10; // 直接修改引用所关联的对象
}
int y = 5;
changeValue(y); // y现在也变为10
```
- 对象的副本不是创建的,所以效率通常更高。
3. 可空性:
- 指针可以是`nullptr`,表示无值,而引用总是绑定到某个对象。
- 如果试图引用未初始化或已释放的对象,会引发错误。
4. 内存管理:
- 指针可以改变其指向,引用一旦初始化就不能更改所绑定的对象。
5. swap函数示例:
- 使用指针:
```cpp
void swap(int* a, int* b) {
int temp = *a;
*a = *b;
*b = temp;
}
```
- 使用引用:
```cpp
void swap(int& a, int& b) {
int temp = a;
a = b;
b = temp;
}
```