更新时间2018-03-06 21:28:40
#include<stdio.h>
void swap(int *p1,int *p2)
{int tmp;
tmp=*p1;
*p1=*p2;
*p2=tmp;
}
void exchange(int *pt1,int *pt2)
{if(*pt1<*pt2)
{
swap(pt1,pt2);
}
printf("%d",*pt1);
}
int main()
{int a;
int b;
int *p1;
int *p2;
a=10;
b=1;
p1=&a;
p2=&b;
exchange(p1,p2);
return 0;
}
两个问题归根结底都是参数传递的问题:对于你的交换函数swap(int a, int b)来说,如果你不使用指针,在函数内,操作的实际上是a和b的一份副本,从上层来说,可以这样理解,在调用swap之前,系统做了这样的调用:int temp_a = a; int temp_b = b;swap(temp_a, temp_b),也就是说在swap中,你操作的实际上是temp_a和temp_b,最终结果不会对a、b造成影响,当然这种理解并不精确,只是为了方便说明;而传递指针时,传递的实际上是参数的地址,例如,对于函数:void swap(int *a, int *b),打个比方,如果a的地址是0xA,b的地址是0xB,这个地址对整个进程空间都是一致的,函数内部对地址内的值进行操作,因此最终会影响到a和b的值。
你有条件才交换的:
if(*pt1<*pt2)
因为*pt1为10,*pt2为1
10<1不成立,就不会调用swap了
反之,若a=1,b=10就会调用swap了