代码:
#include<iostream>
using namespace std;
void swap1(int a,int b)
{
int temp = 0;
temp = a;
a = b;
b = temp;
}
void swap2(int *pa,int *pb)
{
int temp = 0;
temp = *pa;
*pa = *pb;
*pb = temp;
}
void swap3(int *pa,int *pb)
{
int *ptemp;
ptemp = pa;
pa = pb;
pb = ptemp;
}
int main()
{
int a = 2014;
int b = 2015;
int *pa = &a;
int *pb = &b;
swap1(*pa,*pb);
cout<<"a="<<*pa<<"; b="<<*pb<<endl;
swap1(a,b);
cout<<"a="<<*pa<<"; b="<<*pb<<endl;
swap2(pa,pb);
cout<<"a="<<*pa<<"; b="<<*pb<<endl;
swap2(&a,&b);
cout<<"a="<<*pa<<"; b="<<*pb<<endl;
swap3(pa,pb);
cout<<"a="<<*pa<<"; b="<<*pb<<endl;
return 0;
}
运行结果:
分析:
第一次调用swap1函数时实参为 *pa,*pb ,形参为 a,b ,所以 a,b 的值只在调用函数中交换,并没有影响
主函数中的 *pa,*pb,所以输出结果仍为 a=2014; b=2015。
第二次调用swap1函数时实参为 a,b ,形参也为 a,b ,但是同样只是在调用函数中交换,没有改变 *pa,
*pb,所以输出结果仍为 a=2014; b=2015。
第三次调用swap2函数时实参为 pa,pb ,形参为 *pa,*pb,交换了指针所指的值,所以输出结果为
a=2015; b=2014。
第四次调用swap2函数时实参为 &a,&b,形参为 *pa,*pb,可以交换,由于上次的结果为 a=2015; b=2014,
所以交换后为 a=2014; b=2015。
第五次调用swap2函数时实参为 pa,pb,形参为 *pa,*pb,相当于用新的指针指向原来的指针,所以交换的
时候只交换了新的指针,并没有改变原来指针所指的值,所以结果为a=2014; b=2015。