当前位置: 代码迷 >> C语言 >> 为什么我不能实现两个参数交换啊??
  详细解决方案

为什么我不能实现两个参数交换啊??

热度:105   发布时间:2007-09-13 23:48:07.0
为什么我不能实现两个参数交换啊??

刚编了一个程序,如下
#include<stdio.h>
main()
{
int swap(int a,int b);
int x,y;
x=10;
y=20;
swap(x,y);
printf("%d,%d",x,y);
}
int swap(int a,int b)
{
int m;
if(a<b)
{
m=a;
a=b;
b=m;
}
}
我希望交换a,b的值,但却不可以~~为什么??如果我想交换他们的值,又要用函数,该怎么写??高手给个列子吧~~`

搜索更多相关的解决方案: 参数  

----------------解决方案--------------------------------------------------------
[CODE]
#include <stdio.h>
void swap( int* a, int* b )
{
*a+=*b;
*b=*a-*b;
*a-=*b;
}

int main()
{
int a=100, b=200;
swap( &a, &b );
printf("a=%d,b=%d\n",a,b);
return 0;
}
[/CODE]
----------------解决方案--------------------------------------------------------
变量都有作用域的,要想用函数交换a,b,就要传递变量的地址,不是变量值
----------------解决方案--------------------------------------------------------
你那个A和B是局部变量!像楼上那样说用指针可以解决
----------------解决方案--------------------------------------------------------
还要说下,你的编程风格要简洁点,不用那么多行代码的!
----------------解决方案--------------------------------------------------------

传址和传值的问题呵,换指针来解决,建议看老谭的《c程序设计》


----------------解决方案--------------------------------------------------------
变量的作用域很烦啊
----------------解决方案--------------------------------------------------------
同意6楼,谭的《c程序设计》讲得非常明白.
----------------解决方案--------------------------------------------------------
*a+=*b;
*b=*a-*b;
*a-=*b;


偷学一招```
----------------解决方案--------------------------------------------------------

形参和实参````采用的是值传递```
X=10,Y=20``穿给A,B
A=10,B=20``在swap里``AB交换了```
A=20,B=10``但是main里``XY没变```

你在main里P出XY``当然不能得到你要的结果```
你的程序可以样改``

#include<stdio.h>
int main(void)
{
int swap(int a,int b);
int x,y;

x=10;y=20;

swap(x,y);

getchar(); -------------加上它看结果``
return 0;

}
void swap(int a,int b)
{
int m;

if(a<b)
{m=a;a=b;b=m;}

printf("%d,%d",a,b);

return ;
}



----------------解决方案--------------------------------------------------------