c语言指针排序问题

来源:百度知道 编辑:UC知道 时间:2024/06/24 11:47:08
void exchange(int *pointer1, int *pointer2)
{ int temp;
temp=*pointer1, *pointer1=*pointer2, *pointer2=temp;
}
什么意思?
temp=*pointer1, *pointer1=*pointer2, *pointer2=temp
请具体说明一下这句,谢谢

首先说明,这不是地址交换,而是值交换
temp是个定义的临时变量,用来存放中间结果。比如:
a 与 b要交换值
那么,定义一个临时变量c,先保存a的值c = a 然后,把b的值赋给a:a = b最后把a的值赋给b,但a由于之前被修改过了,不是原来的值,而原始值我们保存在c中,所以才有: b = c。上例同样的道理。
temp 用来存放pointer1指向的值,然后 *pointer1=*pointer2是把2指向的值赋给1指向的变量,*pointer2=temp 最后完成1指向的值赋给2指向的变量,就这样。

二楼就是错误的,地址交换是不带*
如:pointer1=pointer2;这是地址交换
如:*pointer1=*pointer2;这是值交换
这里的temp是整形变量没有值,不是能进行地址交换的。只能进行值交换。注意所以整形变量没有实地址时是不能进行地址交换的
如:a=19;*pointer1=&a;那么temp=*pointer1和temp=a是等价的;

int *p;
p存的是地址,*p是p指向的地址里的值
所以
*pointer1,*pointer2都是int型正数
int temp; 设了个中间变量
整个式子实现pointer1所指向的地址里的值与pointer2所指向的地址里的值互换

地址交换