C++引用&和指针在作为形参时的区别
时间: 2024-09-26 07:14:53 浏览: 35
在C++中,引用(`int &m = n`)与指针(`void *p;` 或 `void *ptr;`)作为函数参数的主要区别在于:
1. **隐式解引用**:
- 引用传递的是实际的值,不需要显式的解引用操作。在函数内部,可以直接操作引用所指向的对象,就像它本身就是该对象的副本一样。例如:
```cpp
void func(int &ref) {
ref = 10; // 直接修改引用值
}
int n = 5;
func(n); // n现在变为10
```
2. **不可更改性**:
- 引用一旦初始化就不能改变其绑定的目标。如果试图重新绑定引用,编译器会报错。这增加了代码的可读性和安全性。
3. **存储和内存管理**:
- 指针可以是空(nullptr),并且可以在运行时更改指向的对象。内存分配和释放由程序员负责。
- 引用总是关联到某个已存在的对象,不占用额外的内存空间。
4. **作用域和生命周期**:
- 只有在声明引用的地方以及在其后的代码范围内,引用才有效。
- 指针的作用域取决于它的生存期,可以通过new和delete来动态创建和销毁。
**示例**:
- 使用指针作为形参,可能涉及指针的操作,如指针传递和改变:
```cpp
void pointer_func(int* ptr) {
*ptr = 10; // 修改指针指向的值
}
int n = 5;
pointer_func(&n); // n也变为10
```
- 对于引用,传递的是直接的值,不会创建新的对象:
```cpp
void reference_func(int& ref) {
ref = 20; // 直接修改引用值,无新对象创建
}
int m = 15;
reference_func(m); // m保持不变,但ref改变了
```
**相关问题--:**
1. C++中为什么引入引用而不是只使用指针?
2. 在何时应该优先选择使用引用而非指针作为函数参数?
3. 如何在C++中实现对引用的更改?
阅读全文