
求助!!这个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++的新手,麻烦讲的通俗些,详细些,谢谢了~ 展开
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++的新手,麻烦讲的通俗些,详细些,谢谢了~ 展开
3个回答
展开全部
没有,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的*操作就是根据指针存储的地址取出变量的操作。

2023-07-25 广告
StormProxies是一家国内优质海外HTTP代理商,拥有一个庞大的IP资源池,覆盖200多个地区,IP数量大且匿名度高。其优点还包括超高并发、稳定高效、技术服务等特点,同时提供HTTP、HTTPS以及SOCKS5协议支持。此外,Sto...
点击进入详情页
本回答由Storm代理提供
展开全部
你的交换函数交换的不是值,而是地址,对于指针类型的参数在函数体内指向的变量是可以改变的,但是指针本身只在函数体内有效,出了函数体就无效了
你的交换函数实际的是交换了指针的指向,但这些指针只在函数体内有效
你应该这么写
int n;
n=*p1; *p1=*p2; *p2=n;
或者你也可以直接传引用:
void swap(int &p1,int &p2)
{
int p;
p=p1; p1=p2; p2=p;
}
你的交换函数实际的是交换了指针的指向,但这些指针只在函数体内有效
你应该这么写
int n;
n=*p1; *p1=*p2; *p2=n;
或者你也可以直接传引用:
void swap(int &p1,int &p2)
{
int p;
p=p1; p1=p2; p2=p;
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
传递参数时,程序会把参数重新生成一个拷贝, 在函数里面得到的只是参数的一个拷贝,操作的也是这个拷贝。和原来参数没有关系了。所以修改不了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询