| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1423 人关注过本帖
标题:[求助]求助,关于交换指针的问题
只看楼主 加入收藏
saltfish_007
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2006-10-21
收藏
 问题点数:0 回复次数:14 
[求助]求助,关于交换指针的问题

如下是我的程序:
#include<iostream.h>
void swap(int *,int *);

void main()
{int b=3;int d=8;

cout<<"b="<<b<<".d="<<d<<endl;
int *a=&b;int *c=&d;
swap(a,c);

cout<<"b="<<*a<<".d="<<*c<<endl;
}

void swap(int *x,int *y)
{int *temp=x;
x=y;
y=temp;
}

请各位大侠帮帮忙,指出为什么我的b和d不能交换值?
万分感谢!

搜索更多相关主题的帖子: 指针 
2006-10-22 13:51
maoguoqing
Rank: 6Rank: 6
来 自:重庆
等 级:贵宾
威 望:28
帖 子:2980
专家分:19
注 册:2005-12-5
收藏
得分:0 
举个例子若a = &b = 0x0012ff7c; c = &d = 0x0012ff78;
然后调用swap(a,c) ..x = 0x0012ff7c;y = 0x0012ff78;
交换。。。x = 0x0012ff78;y = 0x0012ff7c;
退出swap()函数。。。a,b 变了吗?没有。。所以你就知道了吧?


这样就可以了:

#include<iostream.h>
//void swap(int *,int *);

void main()
{int b=3;int d=8;


cout<<"b="<<b<<".d="<<d<<endl;
int *a=&b;int *c=&d;
//swap(a,c);
int *temp = a;
a = c;
c = temp;

cout<<"b="<<*a<<".d="<<*c<<endl;
}

/*void swap(int *x,int *y)
{int *temp=x;
x=y;
y=temp;
} */

天行健,君子以自强不息!!QQ:68660681
2006-10-22 17:56
saltfish_007
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2006-10-21
收藏
得分:0 
大侠,很谢谢你帮助我解决这个问题,但是我想得到的结果是自定义一个交换指针,不是通过值交换,而是通过地址交换,然后用主函数引用这个自定义函数。你现在给我的答案是将自定义函数加到了主函数里面的。所以,你能否按我的思路写一个程序呢?依然非常谢谢!
2006-10-23 01:24
maoguoqing
Rank: 6Rank: 6
来 自:重庆
等 级:贵宾
威 望:28
帖 子:2980
专家分:19
注 册:2005-12-5
收藏
得分:0 

#include<iostream.h>
void swap(int **,int **);

void main()
{int b=3;int d=8;

cout<<"b="<<b<<".d="<<d<<endl;
int *a=&b;int *c=&d;
swap(&a,&c);

cout<<"b="<<*a<<".d="<<*c<<endl;
}

void swap(int **x,int **y)
{int *temp=*x;
*x=*y;
*y=temp;
}


天行健,君子以自强不息!!QQ:68660681
2006-10-23 12:51
lzy340623339
Rank: 1
等 级:新手上路
帖 子:37
专家分:0
注 册:2006-10-12
收藏
得分:0 

就是这样的,楼主的方法本来想是通过传地址来交换两个数的值,可却没有完全认识传地址的实质,你的做法一样是传值的,你只能用指针的指针才能得到结果

2006-10-23 17:20
saltfish_007
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2006-10-21
收藏
得分:0 

我有个朋友给了我一个程序
不需要用到2级指针的
试了一下,可以,但是自定义函数那里看不懂,请帮忙解释一下好吗?谢谢

#include<iostream.h>
void swap(int *,int *);

void main()
{int b=3;int d=8;
cout<<"b="<<b<<".d="<<d<<endl;
int *a=&b;int *c=&d;
swap(a,c);

cout<<"b="<<b<<".d="<<d<<endl;
}

void swap(int * x,int * y)
{int temp=*x;
*x=*y;
*y= temp;
}



我想问的是,这里没有返回一个值,为什么还可以交换?而用指针交换的话,依然没有返回,为什么又不能交换?

[此贴子已经被作者于2006-10-25 1:17:10编辑过]

2006-10-24 21:20
maoguoqing
Rank: 6Rank: 6
来 自:重庆
等 级:贵宾
威 望:28
帖 子:2980
专家分:19
注 册:2005-12-5
收藏
得分:0 

那是值得交换,,并非指针交换,,不b,d分别对应了一块内存地址。。
即把地址传进swap函数。但是交换的时候是将这两块内存内的值交换了

相当于:
#include<iostream.h>
void swap(int *,int *);

void main()
{int b=3;int d=8;
cout<<"b="<<b<<".d="<<d<<endl;

swap(&b,&d);

cout<<"b="<<b<<".d="<<d<<endl;
}

void swap(int * x,int * y)
{int temp=*x;
*x=*y;
*y= temp;
}


天行健,君子以自强不息!!QQ:68660681
2006-10-25 14:43
saltfish_007
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2006-10-21
收藏
得分:0 
我现在唯一搞不懂的就是为什么值交换可以成功,而指针交换不能成功?
而且你用值交换的时候并没有在自定义函数里面用到return语句,也成功进行了交换。

在此先谢谢maoguoqing朋友这么多篇文章的回复,非常感谢您。
2006-10-26 05:15
maoguoqing
Rank: 6Rank: 6
来 自:重庆
等 级:贵宾
威 望:28
帖 子:2980
专家分:19
注 册:2005-12-5
收藏
得分:0 
以下是引用saltfish_007在2006-10-26 5:15:15的发言:
我现在唯一搞不懂的就是为什么值交换可以成功,而指针交换不能成功?
而且你用值交换的时候并没有在自定义函数里面用到return语句,也成功进行了交换。

在此先谢谢maoguoqing朋友这么多篇文章的回复,非常感谢您。

虽然是用的值交换。。可是传入函数的却是地址。。
b的地址给了x,d的地址给了y;交换*x与*y,就交换了这两块内存里放的数据

与传递值区别,若这样调用swap(b,d);
传入b,d的值,void swap(int x,int y);
那就会为,x,y新开辟一块内存地址,把b,d的值copy之后放进新开辟的内存
再对x,y交换,。。就是交换了两块新开辟的内存里面的数据。。不会对b,d造成影响;


天行健,君子以自强不息!!QQ:68660681
2006-10-26 13:17
saltfish_007
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2006-10-21
收藏
得分:0 

那么,就是说实参是指针或者引用都不能实现对主函数的参数交换是吗?(如果自定义函数中交换的是地址)



如果自定义函数中交换的是值,那么就一定能成功交换,是吗?

以上两个问题是新问题,您之前的解答我已经明白了,谢谢

2006-10-26 19:16
快速回复:[求助]求助,关于交换指针的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024536 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved