指针进行形参交换时,返还,实参会发生交换吗
时间: 2024-12-22 18:15:37 浏览: 2
在使用指针进行形参交换时,通常不会直接修改函数外部的原始变量值。当你传递两个指针作为参数,并通过它们指向的内容进行交换操作,实际上是改变了指针所指向的内存单元中的值。但是,这并不意味着函数返回后原始的实参也会被自动交换。
例如,在 C 或 C++ 中,你可以有这样一个函数:
```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 的地址中储存的值
std::cout << "After swap: x = " << x << ", y = " << y << std::endl; // 输出:x = 10, y = 5
return 0;
}
```
在这个例子中,`swap` 函数改变了 `a` 和 `b` 指向的数,但 `x` 和 `y` 的值并没有因为 `swap` 返回而改变。如果需要在主函数里也看到交换的结果,你需要显式地更新原变量,比如 `x = y; y = x;`。
相关问题
为什么形参交换不会让实参发生交换 举例子
在函数调用中,实参的值会被传递给形参,形参会在函数内部使用,但是形参的改变不会影响实参的值。这是因为实参和形参是不同的变量,它们在内存中有不同的地址。
举个例子:
```python
def swap(x, y):
x, y = y, x
print("x =", x) # 输出 y 的值
print("y =", y) # 输出 x 的值
a = 1
b = 2
swap(a, b)
print("a =", a) # 输出 1
print("b =", b) # 输出 2
```
在这个例子中,我们定义了一个 `swap` 函数,它接受两个参数 `x` 和 `y`。在函数内部,我们交换了 `x` 和 `y` 的值,然后打印出来。但是,当我们在主程序中调用 `swap` 函数时,`a` 和 `b` 的值并没有发生交换。这是因为 `swap` 函数只是交换了它的形参 `x` 和 `y` 的值,而没有改变实参 `a` 和 `b` 的值。
为什么形参交换不会让实参发生交换 举例子 具体
形参交换不会让实参发生交换,因为在函数中传递的是实参的值的副本,而不是实参本身。当我们交换形参的值时,只是在函数内部对形参的值进行了修改,不会影响到实参的值。
下面是一个例子:
```python
def swap(x, y):
temp = x
x = y
y = temp
a = 1
b = 2
swap(a, b)
print(a, b)
```
输出结果为 `1 2`,说明实参 `a` 和 `b` 的值没有发生交换,因为在函数 `swap` 中,只是对形参 `x` 和 `y` 进行了交换,而实参 `a` 和 `b` 的值并没有改变。
阅读全文