标题:[求助]指针问题
只看楼主
xbw0114
Rank: 1
等 级:新手上路
帖 子:141
专家分:0
注 册:2007-8-8
 问题点数:0 回复次数:9 
[求助]指针问题
#include <iostream.h>
void swap(int *p1,int *p2)
{
int *p;
p=p1;
p1=p2;
p2=p;
}
void main ()
{
int x=20,y=10;
swap(&x,&y) ;
cout<<x<<","<<y;
}
输出的结果为什么是20,10呀?怎么不是10,20呀?
搜索更多相关主题的帖子: 指针 
2007-10-05 18:28
chen7806
Rank: 1
等 级:新手上路
威 望:2
帖 子:160
专家分:0
注 册:2007-8-5
得分:0 
你是地址传递。所以指针的指向没变。

正确的应该带上*号,值传递。

*p=*p1;
*p1=*p2;
*p2=*p;
2007-10-05 18:35
xbw0114
Rank: 1
等 级:新手上路
帖 子:141
专家分:0
注 册:2007-8-8
得分:0 
能再说明白点吗?我是个新手~~

勤奋造就未来
2007-10-05 18:36
coding
Rank: 1
等 级:新手上路
威 望:1
帖 子:60
专家分:0
注 册:2007-9-30
得分:0 

指针变有两个基本运算符:* 与 &
前者代表:取指针的值,后者代表取另一个变量的地址,
你的意思其实是要交换两个变量的值,
但是你想通指针来实现,实际上如果要用子函数来实现这个功能,也只能通过
传递地址变是的方式来实现。
将地址变量传过去以后(要做的是通过地址来交换值的内容,而并不是来交换变量)


2007-10-05 18:49
sccdyc
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2006-4-23
得分:0 
不管你参数怎么传,都是值传递,你的程序可以用二级指针来实现就行了

2007-10-05 20:55
reedleaf
Rank: 2
等 级:新手上路
威 望:3
帖 子:62
专家分:0
注 册:2007-8-5
得分:0 

二楼可能有点小问题,p没有初始化

#include <iostream.h>
void swap(int *p1,int *p2)
{
int p;
p=*p1;
*p1=*p2;
*p2=p;
}
void main ()
{
int x=20,y=10;
swap(&x,&y) ;
cout<<x<<","<<y;
}


2007-10-05 21:25
Black_smart
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2007-8-13
得分:0 
   函数调用是单向的传值调用,只能由实参传递给形参,不能由形参传递给实参。

C++初学者,请多指教.... 学习学习再学习,努力努力再努力!
2007-10-05 22:21
csmenglei951
Rank: 1
等 级:新手上路
威 望:1
帖 子:77
专家分:0
注 册:2007-9-30
得分:0 

#include <iostream.h>
void swap(int *p1,int *p2)
{
int *p=new int ;
*p=*p1;
*p1=*p2;
*p2=*p;
}
void main ()
{
int x=20,y=10;
swap(&x,&y) ;
cout<<x<<","<<y;
}
或者这样写也可以的
#include <iostream.h>
void swap(int *p1,int *p2)
{
int *p=new int ;
p=p1;
p1=p2;
p2=p;
cout<<p1<<","<<p2<<endl;
}
void main ()
{
int x=20,y=10;
swap(&x,&y) ;
}
因为你那个程序交换的只是两个指针指向的位置,而不是x,和y的值,要想交换值就用*p代替p









[此贴子已经被作者于2007-10-6 17:48:21编辑过]

2007-10-06 17:47
jonc
Rank: 1
等 级:新手上路
帖 子:69
专家分:0
注 册:2007-3-25
得分:0 
#include <iostream.h>
void swap(int *p1,int *p2)
{
int p;
p=*p1;
*p1=*p2;
*p2=p;
}
void main ()
{
int x=20,y=10;
swap(&x,&y) ;
cout<<x<<","<<y;
}

菜鸟也想高飞
2007-11-02 17:07
o0花生0o
Rank: 1
等 级:新手上路
帖 子:60
专家分:0
注 册:2007-10-13
得分:0 
p=p1;
p1=p2;
p2=p;
以上语句表示地址传递。假如p1=A,*p1=a; p2=B,*p2=b;地址传递后就是p1=B,但*p1仍为a
2007-11-02 23:59



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-175285-1-1.html




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

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