深刻懂得c++指針的指針和指針的援用。本站提示廣大學習愛好者:(深刻懂得c++指針的指針和指針的援用)文章只能為提供參考,不一定能成為您想要的結果。以下是深刻懂得c++指針的指針和指針的援用正文
展現一下應用指針的指針和指針的援用修正傳遞給辦法的指針,以便更好的應用它。(這裡說的指針的指針不是一個二維數組)
為何須要應用它們
當我們把一個指針做為參數傳一個辦法時,實際上是把指針的復本傳遞給了辦法,也能夠說傳遞指針是指針的值傳遞。
假如我們在辦法外部修正指針會湧現成績,在辦法裡做修正只是修正的指針的copy而不是指針自己,本來的指針還保存著本來
的值。我們用下邊的代碼解釋一下成績:
int m_value = 1; void func(int *p) { p = &m_value; } int main(int argc, char *argv[]) { int n = 2; int *pn = &n; cout << *pn << endl; func(pn); cout << *pn <<endl; return 0; }
看一下輸入成果
輸入的是兩個2
應用指針的指針
展現一下應用指針的指針做為參數
void func(int **p) { *p = &m_value; // 也能夠依據你的需求分派內存 *p = new int; **p = 5; } int main(int argc, char *argv[]) { int n = 2; int *pn = &n; cout << *pn << endl; func(&pn); cout << *pn <<endl; return 0; }
我們看一下 func(int **p)這個辦法
•p: 是一個指針的指針,在這裡我們不會去對它做修正,不然會喪失這個指針指向的指針地址
•*p: 是被指向的指針,是一個地址。假如我們修正它,修正的是被指向的指針的內容。換句話說,我們修正的是main()辦法裡 *pn指針
•**p:兩次解援用是指向main()辦法裡*pn的內容
指針的援用
再看一下指針的援用代碼
int m_value = 1; void func(int *&p) { p = &m_value; // 也能夠依據你的需求分派內存 p = new int; *p = 5; } int main(int argc, char *argv[]) { int n = 2; int *pn = &n; cout << *pn << endl; func(pn); cout << *pn <<endl; return 0; }
看一下func(int *&p)辦法
•p: 是指針的援用,main()辦法裡的 *pn
•*p:是main()辦法裡的pn指向的內容。
以上這篇深刻懂得c++指針的指針和指針的援用就是小編分享給年夜家的全體內容了,願望能給年夜家一個參考,也願望年夜家多多支撐。