使用指標形參交換兩個整數的值
阿新 • • 發佈:2019-01-04
樓主是個小白,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;
}
這樣就大功告成啦:逃)