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
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实际上是没有任何变化的,因为从头到尾他们没有参加任何运算
通过指针交换将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的值没有变。是你自己没意识到而已