|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
源码#include <stdio.h>
void swap(int x, int y);
void swap(int x, int y)
{
int temp;
printf("In swap, 互换前: x = %d, y = %d\n", x, y);
temp = x;
x = y;
y = temp;
printf("In swap, 互换后: x = %d, y = %d\n", x, y);
}
int main(void)
{
int x, y;
printf("请输入两个数:");
scanf("%d %d", &x, &y);
printf("In main, 互换前: x = %d, y = %d\n", x, y);
swap(x, y);
printf("In main, 互换后: x = %d, y = %d\n", x, y);
return 0;
}
输出请输入两个数:55 66
In main, 互换前: x = 55, y = 66
In swap, 互换前: x = 55, y = 66
In swap, 互换后: x = 66, y = 55
In main, 互换后: x = 55, y = 66
--------------------------------
Process exited after 2.531 seconds with return value 0
请按任意键继续. . .
为什么函数内外变量x, y的值不同,是类似于python中的全局变量和局部变量吗?
求帮助
是的,类似于Python中的全局变量和局部变量的概念。在C语言中,函数参数是按值传递的,也就是说函数内部会创建一份参数的副本,对该副本的修改不会影响原始变量的值。
在你的代码中,当你调用`swap(x, y)`时,函数`swap`会创建两个新的变量`int x`和`int y`,并将它们的值初始化为传入的参数的值,也就是55和66。接着,函数内部的交换操作只会修改这两个新变量的值,并不会影响到`main`函数中的原始变量。
如果你想通过函数修改原始变量的值,你可以使用指针作为函数参数,通过指针来操作原始变量的地址。下面是修改后的代码:
#include <stdio.h>
void swap(int *x, int *y);
void swap(int *x, int *y)
{
int temp;
printf("In swap, 互换前: x = %d, y = %d\n", *x, *y);
temp = *x;
*x = *y;
*y = temp;
printf("In swap, 互换后: x = %d, y = %d\n", *x, *y);
}
int main(void)
{
int x, y;
printf("请输入两个数:");
scanf("%d %d", &x, &y);
printf("In main, 互换前: x = %d, y = %d\n", x, y);
swap(&x, &y);
printf("In main, 互换后: x = %d, y = %d\n", x, y);
return 0;
}
这次我们将`swap`函数的参数类型改为指针类型,接受原始变量的地址。在函数内部,通过解引用指针来修改原始变量的值。现在运行代码将会得到期望的结果。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
|
|