求助!!这个C++按址传递的交换函数为什么没有实现交换的目的

#include<iostream.h>voidswap(int*p1,int*p2){int*p;p=p1;p1=p2;p2=p;}voidmain(void){int... #include <iostream.h>
void swap(int *p1,int *p2)
{
int *p;
p=p1;p1=p2;p2=p;
}
void main(void)
{
int x=50,y=100;
cout<<"x="<<x<<'\t'<<"y="<<y<<'\n';
swap(&x,&y);
cout<<"x="<<x<<'\t'<<"y="<<y<<'\n';
}

RT
为什么第二次输出依然是x=50,y=100而不是x=100,y=50?
我是个刚学C++的新手,麻烦讲的通俗些,详细些,谢谢了~
展开
 我来答
卷余友V
2013-07-01 · TA获得超过225个赞
知道答主
回答量:82
采纳率:100%
帮助的人:32万
展开全部

没有,swap函数应该改为

void swap(int *p1,int *p2)
{
int p;
p=*p1;
*p1=*p2;
*p2=p;
}

p=p1只是把指针p1存储的地址值赋给指针p,p和p1都指向同一内存地址,但没有指针指向的数据没有变。同理p1=p2和p2=p。

指针是一种特殊的变量,它存储的是一个内存地址,指针访问数据,要先从指针变量取出这个地址,根据这个地址找到存储的变量。*p1的*操作就是根据指针存储的地址取出变量的操作。

Storm代理
2023-07-25 广告
StormProxies是一家国内优质海外HTTP代理商,拥有一个庞大的IP资源池,覆盖200多个地区,IP数量大且匿名度高。其优点还包括超高并发、稳定高效、技术服务等特点,同时提供HTTP、HTTPS以及SOCKS5协议支持。此外,Sto... 点击进入详情页
本回答由Storm代理提供
吾守护奇迹
2013-07-01 · TA获得超过202个赞
知道小有建树答主
回答量:237
采纳率:66%
帮助的人:171万
展开全部
你的交换函数交换的不是值,而是地址,对于指针类型的参数在函数体内指向的变量是可以改变的,但是指针本身只在函数体内有效,出了函数体就无效了
你的交换函数实际的是交换了指针的指向,但这些指针只在函数体内有效
你应该这么写
int n;
n=*p1; *p1=*p2; *p2=n;

或者你也可以直接传引用:
void swap(int &p1,int &p2)
{
int p;
p=p1; p1=p2; p2=p;
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
小梁41
2013-07-01 · 超过15用户采纳过TA的回答
知道答主
回答量:68
采纳率:0%
帮助的人:50.9万
展开全部
传递参数时,程序会把参数重新生成一个拷贝, 在函数里面得到的只是参数的一个拷贝,操作的也是这个拷贝。和原来参数没有关系了。所以修改不了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式