刚编了一个程序,如下
#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 ;
}
----------------解决方案--------------------------------------------------------