#include <stdio.h> void swap(int x, int y) { int temp; temp = x; /* 保存 x 的值 */ x = y; /* 把 y 赋值给 x */ y = temp; /* 把 temp 赋值给 y */ return; } /* 函数声明 */ void swap(int x, int y); int main () { /* 局部变量定义 */ int a = 100; int b = 200; printf("交换前,a 的值: %d\n", a ); printf("交换前,b 的值: %d\n", b ); /* 调用函数来交换值 */ swap(a, b); printf("交换后,a 的值: %d\n", a ); printf("交换后,b 的值: %d\n", b ); return 0; }为什么值没有交换,能详细解释一下吗
时间: 2024-04-12 21:27:00 浏览: 172
在C语言中,函数参数传递的方式是按值传递(pass by value)。这意味着在函数调用时,实际参数的值会被复制到形式参数中,而形式参数的修改不会影响实际参数的值。
在你给出的代码中,swap函数接受两个整数参数x和y,然后尝试交换它们的值。但是由于参数传递的方式是按值传递,函数内部对x和y的修改不会影响到main函数中a和b的值。
具体来说,当你调用swap函数时,传递给它的是a和b的值的副本。swap函数内部对这两个副本进行了交换操作,但这仅仅是在swap函数内部生效,并不影响main函数中的a和b。
要实现交换效果,你可以使用指针作为参数。通过传递指向变量的指针,可以在函数内部修改实际参数的值。下面是修改后的代码示例:
```c
#include <stdio.h>
void swap(int* x, int* y)
{
int temp;
temp = *x; /* 保存 x 的值 */
*x = *y; /* 把 y 的值赋值给 x */
*y = temp; /* 把 temp 的值赋值给 y */
return;
}
int main()
{
int a = 100;
int b = 200;
printf("交换前,a 的值:%d\n", a);
printf("交换前,b 的值:%d\n", b);
swap(&a, &b);
printf("交换后,a 的值:%d\n", a);
printf("交换后,b 的值:%d\n", b);
return 0;
}
```
在修改后的代码中,swap函数的参数类型为指针。通过传递a和b的地址(即指针),swap函数可以通过指针间接修改实际参数的值,从而实现了交换的效果。
阅读全文