| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 553 人关注过本帖
标题:[求助]指针问题
只看楼主 加入收藏
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
快速回复:[求助]指针问题
数据加载中...
 
   



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

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