C语言中这个关于a,b通过指针交换时,a,b的值为什么没有交换?

main()
{int a,b,*p,*p1,*p2;
scanf("%d,%d",&a,&b);
p1=&a;
p2=&b;
if(a<b)
{p= p1;p1=p2;p2=p; }
printf("a=%d,b=%d\n",a,b);
printf("max=%d,min=%d\n",*p1,*p2);
}
问题:printf("max=%d,min=%d\n",*p1,*p2);输出时a,b成功交换但printf("a=%d,b=%d\n",a,b);这个a,b还是原值,我想,在经过{p= p1;p1=p2;p2=p; }这一步时,如果a<b,这时p1已不再指向a,p2不再指向b了,那么它们也交换了,我哪里理解错了?

p1=&a;//p1指向了a
p2=&b;//p2指向了b

p= p1;//p指向了a
p1=p2;//p1指向了b
p2=p;//p2指向了a

所以
p= p1;p1=p2;p2=p; 三句执行以后只是将指针的指向做了改变,并没改变a,b的值
所以 a,b还是原值

通过指针修改变量值应该用
*p=123
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-02-23
正如你所理解的 P1不指向A了 P2也不指向B了
通过指针交换将P1指向了B P2指向了A,那么通过指针P1,P2访问A,B的时候:P1指向B的地址,输出B;P2指向A的地址,输出A.如第一条输出语句所示.但是A,B实际上是没有任何变化的,因为从头到尾他们没有参加任何运算
第2个回答  2009-02-23
其实原因你自己都已经说了,如果a<b,这时p1已不再指向a,p2不再指向b了,看仔细了是指针指向发生了改变,a和b的值没有变。是你自己没意识到而已

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网