指针不是单独的地址吗,为什么作为形参进行交换会改变实参的值
时间: 2024-12-21 10:23:36 浏览: 13
当你将指针作为函数参数传递时,并不是直接传递内存地址,而是传递指针的副本,这个副本就是指针的一个拷贝。然而,由于指针本质上存储的是地址,所以对副本中的地址进行操作,实际上会影响到原始指针所指向的数据。
在函数中,通过指针访问并修改了实参的数据,即使是指针的副本,其地址仍然是相同的,因此对副本的修改会直接影响到实际的内存区域,进而导致实参的值改变。
举个简单的例子,在C++中,假设我们有一个整型指针作为参数:
```cpp
void swapValues(int* ptrA, int* ptrB) {
int temp = *ptrA; // 将指针A的值赋给temp
*ptrA = *ptrB; // 将指针B的值赋给指针A
*ptrB = temp; // 将temp的值赋给指针B
}
int main() {
int x = 10, y = 20;
int* a = &x, *b = &y;
swapValues(a, b); // 在函数中交换了a和b指向的值
cout << "x: " << x << ", y: " << y; // 输出:x: 20, y: 10
}
```
这里,尽管`a`和`b`是`&x`和`&y`的副本,但通过指针操作实现了数据交换,使得实参`x`和`y`的值也发生了变化。
阅读全文