| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 496 人关注过本帖
标题:请教指针的问题
只看楼主 加入收藏
account
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:91
专家分:107
注 册:2010-4-12
结帖率:100%
收藏
 问题点数:0 回复次数:6 
请教指针的问题
int swap(int *p1,int *p2)
{
 int p;
   p=*p1;
  *p1=*p2;
  *p2=p;
}
main()
{
 int a,b;
 int *p1,*p2;
 p1=&a;
 p2=&b;
 printf("input two numbers:\n");
 scanf("%d,%d",&a,&b);
 printf("%d,%d",*p1,*p2);
 if(a<b)
 swap(p1,p2);
 printf("\n%d,%d",*p1,*p2);
}
这是正确的程序,If(a<b)则交换指针变量顺序输出。按照目前学习理解,我理解为*p即为指针变量所指向的内容,即值,p则指向地址。于是我改了一下如:
int swap(int *p1,int *p2)
{
 int *p;
   p=p1;
   p1=p2;
   p2=p;
}
main()
{
 int a,b;
 int *p1,*p2;
 p1=&a;
 p2=&b;
 printf("input two numbers:\n");
 scanf("%d,%d",&a,&b);
 printf("%d,%d",*p1,*p2);
 if(a<b)
 swap(p1,p2);
 printf("\n%d,%d",*p1,*p2);
}
按照如上,运行后,本以为地址进行了交换,却发现a,b值并没有改变,为什么呢,是不是因为函数没有将指针交换后结果返回?但是在正确的例子里,仅进行了值互换后的函数也没返回值啊?这是为什么?
刚学到指针这一章,问题很菜,请大家原谅

[ 本帖最后由 account 于 2010-4-19 14:12 编辑 ]
搜索更多相关主题的帖子: 学习 numbers 
2010-04-19 13:54
account
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:91
专家分:107
注 册:2010-4-12
收藏
得分:0 
请大家看看,谢谢了
2010-04-19 14:00
swutj
Rank: 1
等 级:新手上路
帖 子:7
专家分:2
注 册:2009-3-19
收藏
得分:0 
....................
naocan
....................
2010-04-19 14:16
swutj
Rank: 1
等 级:新手上路
帖 子:7
专家分:2
注 册:2009-3-19
收藏
得分:0 
p1,p2只在swap()函数中有效
在mian函数中是不会改变的!!
2010-04-19 14:18
hziee
Rank: 4
等 级:业余侠客
帖 子:64
专家分:257
注 册:2010-3-12
收藏
得分:0 
函数的参数的植传递!
2010-04-19 14:36
linjx0123
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:279
专家分:1362
注 册:2006-4-7
收藏
得分:0 
void swap(int *p1,int *p2)
{
   int temp;
   temp=*p1;
   *p1=*p2;
   *p2=temp;
}
这样才是地址传递。

int swap(int *p1,int *p2)
{
int p;
   p=*p1;
  *p1=*p2;
  *p2=p;
}
swap(b1,b2);    (为了解释清楚,改成了b1,b2)
是值传递,这个相当于
int swap(int *p1,int *p2)
{
   int p;
   p1=b1;
   p2=b2;
   p=*p1;
   *p1=*p2;
   *p2=p;
}
虽然p1,p2交换了,但是b1,b2还是原来的值。
2010-04-19 15:01
mywaylgh
Rank: 8Rank: 8
来 自:厨房
等 级:蝙蝠侠
威 望:5
帖 子:188
专家分:729
注 册:2010-3-10
收藏
得分:0 
请google下 c里面参数参数如何传递。

在函数 int swap(int *p1,int *p2) 中 传递的是指针 p1,p2.

调用函数swap(p1,p2)后,会把p1,p2指针的值 copy给 函数中的“p1,p2”值而并不是主函数的p1,p2

不管函数如何运行,主函数的p1,p2的值未变,但p1,p2指向的对象 可以在函数里改变

同样的道理

试图这样改变 n的值也是不可能的(下面的例子可能更好理解):

void ff(int n)
{
    n=1;
}
int main()
{
   int n=5;
   ff(n);
}
n在主函数里一直未变





人生就像茶几 上面放着许多杯具

人生也像厨房 里面总有一些洗具
2010-04-19 15:31
快速回复:请教指针的问题
数据加载中...
 
   



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

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