注册 登录
编程论坛 C++教室

[求助]指针问题

xbw0114 发布于 2007-10-05 18:28, 557 次点击
#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呀?
9 回复
#2
chen78062007-10-05 18:35
你是地址传递。所以指针的指向没变。

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

*p=*p1;
*p1=*p2;
*p2=*p;
#3
xbw01142007-10-05 18:36
能再说明白点吗?我是个新手~~
#4
coding2007-10-05 18:49

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

#5
sccdyc2007-10-05 20:55
不管你参数怎么传,都是值传递,你的程序可以用二级指针来实现就行了
#6
reedleaf2007-10-05 21:25

二楼可能有点小问题,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;
}

#7
Black_smart2007-10-05 22:21
   函数调用是单向的传值调用,只能由实参传递给形参,不能由形参传递给实参。
#8
csmenglei9512007-10-06 17:47

#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编辑过]

#9
jonc2007-11-02 17:07
#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;
}
#10
o0花生0o2007-11-02 23:59
p=p1;
p1=p2;
p2=p;
以上语句表示地址传递。假如p1=A,*p1=a; p2=B,*p2=b;地址传递后就是p1=B,但*p1仍为a
1