菜鸟求救关于简单的交换

井白人 2009-07-11 10:31:49
void swap(int *i,int *j)
{
int *temp=i;
i=j;
j=temp;
}
代码能交换两个数的值吗?为什么?
我调试时为什么能进行交换啊?
我用vc++ 6.0进行调试,
为什么在调用swap(n ,m);时能交换,而用swap(&n,&m);反而不能交换,
void swap(int *i, int *j)
{
int temp=*i;
*i=*j;
*j=temp;
}
书上不是传地址值时才能交换吗?
为什么?
谢谢~
...全文
36 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
a85400448 2009-07-11
  • 打赏
  • 举报
回复
#include <iostream.h>
改为
#include <iostream>
using namespace std;
就可以运行了
谢谢楼上的
井白人 2009-07-11
  • 打赏
  • 举报
回复
因为空间命名using namespace std;,
实际调用了std::swap。。
原型在函数库里找吧。。
a85400448 2009-07-11
  • 打赏
  • 举报
回复
#include <iostream.h>
void swap(int *i,int *j)
{
int *temp=i;
i=j;
j=temp;
}
int main(int argc, char* argv[])
{
int i=1,j=2;
swap(i,j);
cout<<"i="<<i<<"j="<<j<<endl;
return 0;
}


我写成这样的时候调试不通过的啊?
error C2664: 'swap' : cannot convert parameter 1 from 'int' to 'int *'
Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast


LZ怎么说“为什么在调用swap(n ,m);时能交换”?
liujianwish 2009-07-11
  • 打赏
  • 举报
回复
偶也是初学者~~多多学习哈哈
井白人 2009-07-11
  • 打赏
  • 举报
回复
清楚了~谢谢,够详细~~
liujianwish 2009-07-11
  • 打赏
  • 举报
回复

void swap(int *i,int *j) //复制两个参数的地址到i和j
{
int *temp=i; //把i(第一个参数的地址)复制给temp.
i=j; //把j(第二个参数的地址)覆盖到i,现在i存着第二个参数的地址了.
j=temp; //把temp(第一个参数的地址)覆盖给j,现在j存着第一个参数的第地址了.
}
//函数结束了,i,j,temp都消失了……那么存放的地址消失了。。但是地址(你家没有消失(根本没有变化))。
//就像是你把地址告诉了朋友A,而朋友A把你家地址个别人家地址搞错了。(不小心交换写了),但事后朋友A有把地址都忘记了~~那不是白搭嘛
baihacker 2009-07-11
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 jarifee 的回复:]
“void swap(int *i,int *j)
{
int *temp=i;
i=j;
j=temp;
}

不可以交换,这仅修改地址,函数结束了,指针消亡了 “
请问为什么我调试时又能进行交换呢?
是不是也调用时也调用了系统函数模板类里的函数啊?
[/Quote]
我已经回答了...
井白人 2009-07-11
  • 打赏
  • 举报
回复
“void swap(int *i,int *j)
{
int *temp=i;
i=j;
j=temp;
}

不可以交换,这仅修改地址,函数结束了,指针消亡了 “
请问为什么我调试时又能进行交换呢?
是不是也调用时也调用了系统函数模板类里的函数啊?
大前置 2009-07-11
  • 打赏
  • 举报
回复
void swap(int *i,int *j)
{
int *temp=i;
i=j;
j=temp;
}

不可以交换,这仅修改地址,函数结束了,指针消亡了

void swap(int *i, int *j)
{
int temp=*i;
*i=*j;
*j=temp;
}

可以交换,因为这是直接修改指针指向空间的数据,不是修改指针指向;
相当于是修改了外部的空间数据
baihacker 2009-07-11
  • 打赏
  • 举报
回复
因为你调用swap(n, m)的时候类型和int*不匹配...于是调用了std::swap
这个是可以的...

64,687

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧