代碼:
#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。