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++教材里面,然后后面会有一行字:运行这个程序,同学们你们会发现输出的值并没有交换,这是为什么呢?(如果看到这行字请淡定)
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯