永发信息网

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

答案:5  悬赏:50  手机版
解决时间 2021-02-28 01:55
#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函数所修改的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;
}
----------
很多人都说实参和形参是这个问题原因。
其实我说的是本质.形参和实参只是起概念上的作用罢了。并不能准确的理解这个问题.
全部回答
形参改变不影响实参,所以要取地址。代码如下。 #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(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);可以理解成执行下面这一段代码 { int x=a; int y=b; int temp=x; x=y; y=temp; } 可以看出,调换的只是x和y的值,a与b的值并没有发生变化
各种缺分号看着真不爽……这样能编译通过的话我吃键盘 1.改成void swap (int& x, int& y)可以使函数可以修改main函数中的x,y 2.目测根本不能在cin后面用endl…… 3.貌似只有用getchar函数了…… if(getchar()=='y') cout<<'\n';之类的……
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
四字游戏名字大全
风险管理的最主要的目标是
崇州西江至大邑王泗工业园区有多少公里
偶园街口腔门诊怎么去啊,有知道地址的么
社保卡可以作银行借记卡一样的用吗?
混苗的,现在开花了,认识的大神指点一下什么
黄芪胡椒蒸鸡的功效
食得福烧腊套餐云港店在哪里啊,我有事要去这
wifi连接正常,什么东西都正常,但是在房间里
临沂到南阳随车电话多少?
施工现场的室内配电线路包括()。A.绝缘导线和
华联名苑(西南门)这个地址在什么地方,我要处
懂黑界的进!
财神放在哪个方位好
如何通过测量万能表知道IO芯片引脚的定义
推荐资讯
生产一吨无氧铜杆的平均电耗是多少?
蔡甸爹山哪些地方拆迁‘
【拉开序幕的意思】拉开序幕和拉开帷幕意思一
金纤儿减肥药一天吃几粒
韩国哪个女歌手的唱功最好?
小欢纯手工打面馆在哪里啊,我有事要去这个地
温州营养早餐地址在哪,我要去那里办事
平年阴历有353~355天,闰年阴历有383~385天
按照《建筑业企业资质管理规定》,企业取得建
已知函数f(x)=|x-1|+|x+1|,用定义证明其奇偶
【均值不等式】均值不等式的定义是什么?
百度2017年2月16日0点小锅突然搜不到任何台了
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?