永发信息网

C++两个数据交换,为什么结果没有交换呢

答案:6  悬赏:40  手机版
解决时间 2021-02-25 15:24
  • 提问者网友:蔚蓝的太阳
  • 2021-02-25 02:56
如下代码,实现两个数据的交换工作,为什么不能实现呢

#include

using namespace std;

void swp(int x,int y)
{
int tmp;
tmp=x;
x=y;
y=tmp;
}
int main()
{
int x(0),y(1);

cout << "before swp()\t"
<<"x="< <<"y= "< swp(x,y);
cout << "after swp()\t"
<<"x="< <<"y= "<
return 0;
}

运行的结果是 before :x=0 y=1
after x=0 y=1
不是想要的结果,x=1,y=0
最佳答案
  • 五星知识达人网友:渡鹤影
  • 2021-02-25 03:45
您好,函数参数传递有值传递和址传递,您这个是值传递。
实质上,您吧x,y传给了参数中的临时变量x,y,而不是原来的x,y,您可以把函数void swp(int a,int b)
{
int tmp;
tmp=a;
a=b;
b=tmp;
}
最后结果一样,但是这样好理解,交换的其实是临时变量a,b,函数执行完a,b就销毁了。
要想交换可以传x,y的地址,这样写
void swp(int *x,int *y)
{
int tmp;
tmp=*x;
x*=*y;
y*=tmp;
}
调用的时候swap(&x,&y);
这样传递的是x,y的地址,函数内部修改的其实是x,y的值了。
这个也可以用引用传递修改,您可以查阅一下引用部分的知识,很简单的。
全部回答
  • 1楼网友:话散在刀尖上
  • 2021-02-25 09:00
你这个参数传递方式是值传递的,不是引用传递,如果是引用传递的话,就会修改值的。 值传递永远不会修改形参的值的。
  • 2楼网友:摆渡翁
  • 2021-02-25 08:18
#include using namespace std; void swp(int &x,int &y) { int tmp; tmp=x; x=y; y=tmp; } int main() { int x(0),y(1); cout << "before swp()\t" <<"x="<
  • 3楼网友:舍身薄凉客
  • 2021-02-25 07:10
呵呵,这个问题,曾经困饶我3个月,char *p1="hello"; char *p2="good"; 你这么定义等于定义两个常量,而常量的值是不能改变的,你可以这样定义 char p1[]="hello"; char p2[]="good";至于怎么交换,我想就不用我说了 难道我说的还不清楚吗,*p1="hello"; char *p2="good";这么定义都是常量,常量的值当然不能修改了
  • 4楼网友:掌灯师
  • 2021-02-25 06:14
因为你交换的是子函数的 形参 无法影响 main函数中的参数 如果要修改 需要用指针
  • 5楼网友:零点过十分
  • 2021-02-25 04:42
因为函数传递的只是“值”,就是数字复制过去而已,void swp(int x,int y)里面的x和y是原main函数里面x、y的复制品么~~不会影响原来main里面的值。 这种题目经常出现在C/C++教材里面,然后后面会有一行字:运行这个程序,同学们你们会发现输出的值并没有交换,这是为什么呢?(如果看到这行字请淡定)
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯