C++ 形参如果为普通变量(值传递),由于副本机制无法实现变量a、b的交换。
时间: 2024-09-12 09:06:18 浏览: 37
老生常谈C++中实参形参的传递问题
5星 · 资源好评率100%
在C++中,如果你使用普通的值传递(即传参是按值复制,而非引用或指针)来处理形参,当你试图通过函数改变实参a和b的值时,由于每次函数调用时都会创建新的局部变量副本,对函数内部的副本进行操作并不会影响到原来的变量a和b。这意味着在函数内部交换形参a和b的值,不会改变函数外部的原始变量。
例如:
```cpp
void swap(int a, int b) {
int temp = a;
a = b;
b = temp;
}
int main() {
int x = 5, y = 10;
swap(x, y);
// 这里x和y的值仍然是5和10,因为函数内的是副本
cout << "x: " << x << ", y: " << y << endl; // 输出:x: 5, y: 10
}
```
为了在函数中交换两个变量的值,你需要使用引用或者指针,像这样:
```cpp
void swapByReference(int& a, int& b) {
int temp = a;
a = b;
b = temp;
}
int main() {
int x = 5, y = 10;
swapByReference(x, y);
// 现在x和y的值已经交换了
cout << "x: " << x << ", y: " << y << endl; // 输出:x: 10, y: 5
}
```
阅读全文