C++;为什么这里用了swap函数而没有发生交换?

来源:百度知道 编辑:UC知道 时间:2024/09/28 07:53:27
#include"iostream.h"
void swap(int x,int y);
int main()
{
int a=2,b=3;
swap(a,b);
cout<<"a="<<a<<endl;
cout<<"b="<<b<<endl;
return 0;
}
void swap(int x,int y)
{
int temp;
temp=x;
x=y;
y=temp;
}

得到结果是a=2 b=3 没有交换
无法理解,请详细解释

调用swap(a,b);可以理解成执行下面这一段代码
{
int x=a;
int y=b;
int temp=x;
x=y;
y=temp;
}
可以看出,调换的只是x和y的值,a与b的值并没有发生变化

理解形参和实参是解决这个问题的关键。。。

形参改变不影响实参,所以要取地址。代码如下。
#include"iostream.h"
void swap(int &x,int &y);
int main()
{
int a=2,b=3;
swap(a,b);
cout<<"a="<<a<<endl;
cout<<"b="<<b<<endl;
return 0;
}
void swap(int &x,int &y)
{
int temp;
temp=x;
x=y;
y=temp;
}
也可以直接把输出放在函数中
#include"iostream.h"
void swap(int x,int y);
int main()
{
int a=2,b=3;
swap(a,b);

return 0;
}
void swap(int x,int y)
{
int temp;
temp=x;
x=y;
y=temp;
cout<<"a="<<x<<endl;
cout<<"b="<<y<<endl;
}

其实这个问题主要取决于你的swap函数所修改的x,y是不是main函数中的a,b
运行结果告诉你不