C++;为什么这里用了swap函数而没有发生交换?
#include"iostream.h"voidswap(intx,inty);intmain(){inta=2,b=3;swap(a,b);cout<<"a="<<a<...
#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 没有交换
无法理解,请详细解释 展开
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 没有交换
无法理解,请详细解释 展开
6个回答
展开全部
其实这个问题主要取决于你的swap函数所修改的x,y是不是main函数中的a,b
运行结果告诉你不是.
那么x,y是什么呢 x,y代表的是函数栈当中的参数.
相信你听说过函数调用的过程有压栈这一说法吧。
其实x,y是储存在栈当中的
函数调用的时候会为传入参数在栈当中生成值相等的副本。
x,y代表的就是这个副本,而不是代表传入参数。所以你修改x,y不能修改a,b。
如果想要修改a,b就必须知道a,b所在的内存地址.所以可以通过传入地址解决问题.
void swap(int *x,int *y){
int a;
a=*x;
*x=*y;*y=a;
}
如果使用c++可以使用引用解决问题,引用大多数编译器也是通过指针实现的.
void swap(int &x,int &y){
int a;
a=x;
x=y;y=a;
}
----------
很多人都说实参和形参是这个问题原因。
其实我说的是本质.形参和实参只是起概念上的作用罢了。并不能准确的理解这个问题.
运行结果告诉你不是.
那么x,y是什么呢 x,y代表的是函数栈当中的参数.
相信你听说过函数调用的过程有压栈这一说法吧。
其实x,y是储存在栈当中的
函数调用的时候会为传入参数在栈当中生成值相等的副本。
x,y代表的就是这个副本,而不是代表传入参数。所以你修改x,y不能修改a,b。
如果想要修改a,b就必须知道a,b所在的内存地址.所以可以通过传入地址解决问题.
void swap(int *x,int *y){
int a;
a=*x;
*x=*y;*y=a;
}
如果使用c++可以使用引用解决问题,引用大多数编译器也是通过指针实现的.
void swap(int &x,int &y){
int a;
a=x;
x=y;y=a;
}
----------
很多人都说实参和形参是这个问题原因。
其实我说的是本质.形参和实参只是起概念上的作用罢了。并不能准确的理解这个问题.
展开全部
调用swap(a,b);可以理解成执行下面这一段代码
{
int x=a;
int y=b;
int temp=x;
x=y;
y=temp;
}
可以看出,调换的只是x和y的值,a与b的值并没有发生变化
{
int x=a;
int y=b;
int temp=x;
x=y;
y=temp;
}
可以看出,调换的只是x和y的值,a与b的值并没有发生变化
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这是因为调用函数时进行的是 值传递
swap(a,b);实际上执行的是把a的值传给x,把b的值传给y,在函数内部把x,y的值交换了。但实际上a,b的值并没有变。
要想改变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;
}
swap(a,b);实际上执行的是把a的值传给x,把b的值传给y,在函数内部把x,y的值交换了。但实际上a,b的值并没有变。
要想改变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);
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;
}
#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;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
楼上都已经说的很清楚了,建议 参考值传递,指针传递,引用传递,别名传递等不同传递方式加以区分;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询