比如我写一个交换函数,是不是我用指针传递,把两个实参用地址的形式传到形参,然后在我定义函数里我通过指针找到对应内存空间里的值就能进行交换,但是值传递由于定义的交换函数内部局部变量可以互换,但局部变量只能作用在定义的函数内部,所以主函数里的全局变量不受影响无法互换
时间: 2024-09-06 08:06:01 浏览: 52
C语言实参、形参、函数调用、指针、引用、&符号实例[定义].pdf
在C语言中,如果你想要编写一个可以交换两个变量值的函数,确实可以通过指针传递来实现。这是因为指针可以提供变量的内存地址,使得函数能够直接访问和修改实参变量的值。具体来说,当使用指针作为函数参数时,函数内部可以通过解引用指针来获取和修改指针所指向的变量的值。
这里是一个简单的例子来说明如何通过指针传递来实现变量的交换:
```c
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
int main() {
int x = 10, y = 20;
swap(&x, &y); // 传递x和y的地址
// 此时x和y的值已经被交换
return 0;
}
```
在上面的代码中,`swap` 函数接收两个指向整数的指针,然后通过解引用这些指针来交换它们指向的值。当你在 `main` 函数中调用 `swap(&x, &y)` 时,你传递的是 `x` 和 `y` 的地址,而不是它们的值。因此,`swap` 函数内部的交换会反映到 `main` 函数中的 `x` 和 `y` 变量上。
关于值传递的情况,如果你使用值传递方式,即传递变量的副本,那么在函数内部对参数所做的任何修改都只会作用于副本,而不会影响到原始变量。这意味着如果你在 `main` 函数中声明了全局变量,并尝试通过一个仅接受值传递的函数来交换它们的值,原始全局变量的值不会改变。
例如:
```c
void swap_val(int a, int b) {
int temp = a;
a = b;
b = temp;
}
int main() {
int x = 10, y = 20;
swap_val(x, y);
// 此时x和y的值没有被交换,因为传递的是副本
return 0;
}
```
在这个例子中,`swap_val` 函数无法改变 `main` 函数中的 `x` 和 `y` 的值,因为它只是交换了 `a` 和 `b` 的副本。
阅读全文