1. 程式人生 > >使用指標形參交換兩個整數的值

使用指標形參交換兩個整數的值

樓主是個小白,C++Primer看到第六章,做練習的時候遇到了點小問題,解決了以後到這裡來跟大家分享一下。
題目是要求使用指正形參交換兩個整數的值。
我心想,這還不簡單,恩,開始動手了。

#include<iostream>
#include<cstdlib>
using namespace std;
void exchange(int *p, int *q)
{
    int *k =0;
    k = p;
    p = q;
    q = k;
}
int main()
{
    int n = 0, i = 42;
    int *p = &n;
    int
*q = &i; exchange(p, q); cout << *p << endl << *q<<endl; return 0; }

執行以後發現值並沒有被交換。。。。。
反覆看書,看到書上有一段這樣的解釋:函式對所有形參的操作都不會影響實參。換句話說,上面的程式碼中的p,q的值都沒有被改變。
為了驗證這種說法,我在主函式中去掉了呼叫,把exchange中的內容放到了主函式中。

#include<iostream>
#include<cstdlib>
using namespace
std; int main() { int n = 0, i = 42; int *p = &n; int *q = &i; int *k = 0; k = p; p = q; q = k; cout << *p << endl << *q<<endl; return 0; }

執行之後發現值完成了交換,說明正是因為書上提到的原因,函式對形參的操作不會影響實參。
在呼叫時使用對指標的引用傳遞,就可以實現題目中的要求。

#include<iostream>
#include<cstdlib> using namespace std; void exchange(int **p, int **q) { int *k = *p; *p = *q; *q = k; } int main() { int n = 0, i = 42; int *p = &n; int *q = &i; exchange(&p, &q); cout << *p << endl << *q<<endl; return 0; }

這樣就大功告成啦:逃)