用自定义函数进行两个数的交换(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);
} 展开
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);
} 展开
2个回答
展开全部
宽恕(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
恩.谢谢你哦.把这个经典的也贴上去.呵呵
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
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询