这个指针的值不是已经交换了吗?

来源:百度知道 编辑:UC知道 时间:2024/06/17 13:09:28
swap(int *p1,int *p2)
{int *p;
p=p1;
p1=p2;
p2=p;
}
main()
{
int a,b;
int *pointer_1,*pointer_2;
scanf("%d,%d",&a,&b);
pointer_1=&a;pointer_2=&b;
if(a<b) swap(pointer_1,pointer_2);
printf("\n%d,%d\n",*pointer_1,*pointer_2);
getch();
}

pointer_1和pointer_2明明已经交换了啊,为什么输出还是原来的值?
我是想知道为什么我把两个指针所指的变量已经交换了,输出的时候它们又指回原来的变量。

为什么不能交换地址?读起来没问题啊,符合逻辑。

难道函数运行的时候不是用的pointer_1和pointer_2,反而另外用空间弄个p1和p2另外计算,只返回最后的值吗?

因为*p1,*p2仅仅是两个形参罢了。
在做值传递的时候他们仅保存了a,b的地址而不代表pointer_1和pointer_2他们的交换并不影响pointer_1和pointer_2的值。
如果要交换,就要把*p1,*p2指向单元的存储值交换,而不是交换地址。

读起来确实符合逻辑,但是根据变量传递的规律来说就有问题。
当swap()准备执行的时候,pointer_1的值给了p1,pointer_2的值给了p2.
这时他们都是独立的变量,只不过值两两相等罢了。
所以当p1和p2交换时,poiner_1,pointer_2的值没有改变。
你其实并没有把两个变量所指向的值交换,只是把指针存储地址交换罢了。

pointer_1和pointer_2都是main中的局部变量,swap中是无法使用的。

swap(int *p1,int *p2)
{int *p;
p=p1;
p1=p2;
p2=p;
}
这里不对

swap(int *p1,int *p2)
{int p;
p=*p1;
*p1=*p2;
*p2=p;
}

这样就行了

swap(int *p1,int *p2)
{int *p;
p=p1;
p1=p2;
p2=p;
}换成
swap(int *p1,int *p2)
{
int p;
p=*p1;
*p1=*p2;
*p2=p;
}
就可以了

11号桌和12号桌的同学交换
同学是交换了位置
但桌子并未交换

OK