用自定义函数进行两个数的交换(C语言)

请问哪里错了呀?谢谢,运行的结果没有交换过?intexchange(intx,inty);main(){intx,y;scanf("%d%d",&x,&y);exchan... 请问哪里错了呀?谢谢,运行的结果没有交换过?
int exchange (int x,int y);
main()
{
int x,y;
scanf("%d %d",&x,&y);
exchange(x,y);
printf("x=%d,y=%d",x,y);
getch();
}
int exchange (int a,int b)
{
int temp;
temp=a;
a=b;
b=temp;
return(a,b);
}
展开
 我来答
百度网友088d094
2007-03-16 · TA获得超过379个赞
知道答主
回答量:68
采纳率:0%
帮助的人:68.5万
展开全部
宽恕(95603042) 08:38:35
Gerl
上面这题是形参不能改变实参的值,所以两数未交换成功
也门的心(386185771) 08:40:02

Gerl(9968680) 08:48:37
为什么呢?
宽恕(95603042) 08:43:35
exchange函数中a,b交换了,但x,y没有交换
也门的心(386185771) 08:45:11
那用*pa和*pb来代替那x和y可以吗?
Gerl(9968680) 08:52:00
int exchange (int a,int b)
{
int temp;
temp=a;
a=b;
b=temp;
printf("x=%d,y=%d",a,b);
return(a,b);
}
我在这里看到了.可是不知道为什么呀
Gerl(9968680) 08:52:22
指针.我试试
也门的心(386185771) 08:46:28
你用用就知道可以的
宽恕(95603042) 08:46:51
改为
int exchange (int *a,int *b)
{
int temp;
temp=*a;
*a=*b;
*b=temp;
printf("x=%d,y=%d",*a,*b);
return(*a,*b);
}
传入地址
也门的心(386185771) 08:47:07
就这样
哈哈

Gerl(9968680) 08:54:51
不行哦
宽恕(95603042) 08:49:27
结果是什么?
Gerl(9968680) 08:56:40
还是一样啊.我昏
宽恕(95603042) 08:50:50
把全部代码发过来,我看看
Gerl(9968680) 08:57:13
exchange 函数是没有问题的
Gerl(9968680) 08:57:29
只是main那里......不知道
宽恕(95603042) 08:52:43
把整个代码贴上来看看
Gerl(9968680) 08:59:10
main()
{ /* int exchange (int a,int b); */
int x,y;
int (*k)();
scanf("%d %d",&x,&y);
/* exchange(x,y); */

printf("x=%d,y=%d",x,y);
getch();
}
Gerl(9968680) 08:59:16
我只改了 这里
Gerl(9968680) 08:59:44
main()
{ /* int exchange (int a,int b); */
int x,y;
int (*k)();
scanf("%d %d",&x,&y);
/* exchange(x,y); */
(*k)(x,y);
printf("x=%d,y=%d",x,y);
getch();
}
Gerl(9968680) 09:00:43
感觉越改越错.呵呵.头昏脑涨了.呵呵
也门的心(386185771) 08:54:48
把main前面的int exchange (int x,int y); 改成int exchange (int a,int b); 看看
宽恕(95603042) 08:55:10
调用exchange是参数要传地址
像这样
main()
{
int x,y;
scanf("%d %d",&x,&y);
exchange(&x,&y);
printf("x=%d,y=%d",x,y);
getch();
}
宽恕(95603042) 08:56:19
exchange函数是这样
int exchange (int *a,int *b)
{
int temp;
temp=*a;
*a=*b;
*b=temp;
printf("x=%d,y=%d",*a,*b);
return(*a,*b);
}

Gerl(9968680) 09:04:39
好了.用地址直接传递.为什么要这样呢?而那样不行呢?
Gerl(9968680) 09:06:12
用你的方法已经解决了.我要把你的大名帖在百度的问题那里。呵呵.
等等哦。哦先贴上去拿5分先。呵呵
宽恕(95603042) 09:02:18
传值时形参a,b的改变不会影响实参x,y
如果传地址就不同了,形参和实参是同一个地址
宽恕(95603042) 09:03:24
传值:A传到B,改变B,A不会改变,是把A的值传过来B。
传址:A传到B,改变B,A也会改变,只是把A的地址传过来B。
Gerl(9968680) 09:11:17
哦,我明白了.你的意思是说实参 x,y 无法被形参 a b 改变.
所以只能用地址传递实现.是这个意思吗?
宽恕(95603042) 09:06:45

宽恕(95603042) 09:07:10
多看看C语言的书就明白了
Gerl(9968680) 09:13:44
恩.谢谢你哦.把这个经典的也贴上去.呵呵

参考资料: 宽恕(95603042) 09:07:10

风若远去何人留
2015-12-30 · 知道合伙人互联网行家
风若远去何人留
知道合伙人互联网行家
采纳数:20412 获赞数:450135
专业C/C++软件开发

向TA提问 私信TA
展开全部
要用函数实现两个数的交换,则函数参数必须定义为指针形式,否则函数中对数值的修改将不会影响主调函数,这是C语言的规则。
所以,以整型为例,自定义函数书写如下:
void swap_int(int*a,int*b)
{
int t;

t = *a;

*a=*b;

*b=t;

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式