当前位置: 代码迷 >> C语言 >> 有个指针的问题搞不懂,请指教
  详细解决方案

有个指针的问题搞不懂,请指教

热度:387   发布时间:2008-06-22 22:00:19.0
有个指针的问题搞不懂,请指教
void swap(int *pa,int *pb)
{int *p;
p=pa;pa=pb;pb=p;
}
main()
{int a=2,b=4;
int *pa,*pb;
pa=&a;pb=&b;
if(a<b) swap(pa,pb);
printf("%d,%d\n",*pa,*pb);
}
为什么这个程序只能把pa,pb的地址改了,但不改变对应的值呢?
搜索更多相关的解决方案: 指针  指教  

----------------解决方案--------------------------------------------------------
我想问的就是为什么对主函数没影响的?就是为什么*pa和*pb的值没有交换?
----------------解决方案--------------------------------------------------------
好像是指针只能改变他所指向的元素的值,本身的不会改变!
----------------解决方案--------------------------------------------------------
不会吧
我看不是通过指针传递的,修改了指针的地址,那么指针指向的内容也该跟着变啊!
----------------解决方案--------------------------------------------------------
指针做参数和基本类型做参数实际上是一样的。

本来如果*pa 指向 a, *pb 指向b,在指针做参数的时候,系统也是复制了pa, pb的值, 我们暂定他叫做pa1, pb1.
那么*pa1=a, *pb1=b. 然后你交换*pa1,*pb1,其实交换的就是a,b.

但是,你在这里交换的是pa1, pb1两个值,但是这两个值在函数运行结束后就消失了,你根本没有交换到实际的a,b。

不知道说的清楚不清楚,错了请大家指教
----------------解决方案--------------------------------------------------------
提示: 作者被禁止或删除 内容自动屏蔽
2008-06-23 04:53:38
coming

等 级:新手上路
帖 子:244
专家分:0
注 册:2008-4-20
  得分:0 
你交换的指针,指针是指向变量的,交换了仅仅是改变了指针,也就是改变了指针的指向,而并没有改变指向的值,因为在你的函数里没有改变,所以对主函数里定义的也不会改变 也就是没有影响
----------------解决方案--------------------------------------------------------
不能通过改变指针形参的值而使指针实参的值改变
----------------解决方案--------------------------------------------------------
  相关解决方案