一个简单的错误,谁帮我看看
#include<stdio.h>void swap(int x,int y);
void main()
{
int a=10,b=20;
printf("a=%d,b=%d",a,b);
swap(a,b);
printf("a=%d,b=%d",a,b);
}
void swap(int x,int y)
{
int t ;
t=x;x=y;y=t;
}
这个为啥实现不了交换值 先打印一下x,y的值:
#include<stdio.h>
void swap(int x,int y);
void main()
{
int a=10,b=20;
printf("a=%d,b=%d",a,b);
swap(a,b);
printf("a=%d,b=%d",a,b);
}
void swap(int x,int y)
{
int t;
t=x;
x=y;
y=t;
printf("%d %d\n", x,y);
}
可以看出,x和y已经交换了,可是并没有返回出去
有两种解决办法:
1,把输入输出都放进swap里
2,在最后写一个return,把a和b的值都赋值进去 qiuyouzhi 发表于 2020-3-18 10:59
先打印一下x,y的值:
可以看出,x和y已经交换了,可是并没有返回出去
噢噢明白了,谢谢你{:5_95:} 本帖最后由 sunrise085 于 2020-3-18 11:22 编辑
因为你这种参数传递是值传递,在swap函数中的形参是新的变量,需要址传递才能完成在函数中交换原数据。
#include<stdio.h>
void swap(int *x,int *y);
void main()
{
int a=10,b=20;
printf("a=%d,b=%d\n",a,b);
swap(&a,&b);
printf("a=%d,b=%d\n",a,b);
}
void swap(int *x,int *y)
{
int t ;
t=*x;*x=*y;*y=t;
} dan蛋 发表于 2020-3-18 11:03
噢噢明白了,谢谢你
那就设个最佳答案吧~ qiuyouzhi 发表于 2020-3-18 10:59
先打印一下x,y的值:
可以看出,x和y已经交换了,可是并没有返回出去
请问第二种的写个return有两个参数应该怎么做啊
dan蛋 发表于 2020-3-18 11:10
请问第二种的写个return有两个参数应该怎么做啊
#include<stdio.h>
void swap(int x,int y);
void main()
{
int a=10,b=20;
printf("a=%d,b=%d",a,b);
swap(a,b);
printf("a=%d,b=%d",a,b);
}
void swap(int x,int y)
{
int t ;
t=x;x=y;y=t;
}
如果main函数中的两个printf都不取消,不再swap函数中打印的话,只能return吗? dan蛋 发表于 2020-3-18 11:10
请问第二种的写个return有两个参数应该怎么做啊
C语言不能返回两个以上的参数。。。
要不你就在swap里打印,要不就
不用swap sunrise085 发表于 2020-3-18 11:04
因为你这种参数传递是值传递,在swap函数中的形参是新的变量,需要址传递才能完成在函数中交换原数据。
你的程序我懂了,必须交换地址吗,如果交换值可以吗。我对我那个错误还是有点模糊
比如这样交换值
#include<stdio.h>
void main()
{
int t, a=10,b=20;
t=a;a=b;b=t
printf("a=%d,b=%d",a,b);
}
用函数交换怎么不行,是没有函数的执行没有返回也没有打印对吧? dan蛋 发表于 2020-3-18 11:12
#include
void swap(int x,int y);
用函数实现两个数据的交换必须要用址传递第,值传递是实现不了的。
仔细看一下我在4楼的回复。 要在函数里面改变数值,要用地址传递,即把两个变量的地址传给函数的形参 dan蛋 发表于 2020-3-18 11:23
你的程序我懂了,必须交换地址吗,如果交换值可以吗。我对我那个错误还是有点模糊
比如这样交换值
这不是交换地址啊。只是吧地址作为参数传递到函数swap中去,然后在swap函数中对a和b进行交换操作。
你的程序是值传递方式,相当于在swap函数中创建了两个新的临时变量,然后对临时变量进行了交换,执行完函数后,那两个临时变量就消失了,对主函数中的a和b没有任何影响。
可以看一下这个帖子 我觉得两个问答都很好,一个是说明了函数需要返回值或者打印,一个是说明了函数的形参用完就消失了,需要址传递才能完成在函数中交换原数据。 北有樵先生 发表于 2020-3-18 11:29
要在函数里面改变数值,要用地址传递,即把两个变量的地址传给函数的形参
谢谢,我听懂了,你的方法上档次 qiuyouzhi 发表于 2020-3-18 11:16
C语言不能返回两个以上的参数。。。
要不你就在swap里打印,要不就
不用swap
嗯嗯,谢谢{:5_110:}
页:
[1]