深入理解c++指針的指針和指針的引用
展示一下使用指針的指針和指針的引用修改傳遞給方法的指針,以便更好的使用它。(這里說的指針的指針不是一個二維數(shù)組)
為什么需要使用它們
當我們把一個指針做為參數(shù)傳一個方法時,其實是把指針的復本傳遞給了方法,也可以說傳遞指針是指針的值傳遞。
如果我們在方法內(nèi)部修改指針會出現(xiàn)問題,在方法里做修改只是修改的指針的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; }
看一下輸出結(jié)果
輸出的是兩個2
使用指針的指針
展示一下使用指針的指針做為參數(shù)
void func(int **p) { *p = &m_value; // 也可以根據(jù)你的需求分配內(nèi)存 *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: 是被指向的指針,是一個地址。如果我們修改它,修改的是被指向的指針的內(nèi)容。換句話說,我們修改的是main()方法里 *pn指針
•**p:兩次解引用是指向main()方法里*pn的內(nèi)容
指針的引用
再看一下指針的引用代碼
int m_value = 1; void func(int *&p) { p = &m_value; // 也可以根據(jù)你的需求分配內(nèi)存 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指向的內(nèi)容。
以上這篇深入理解c++指針的指針和指針的引用就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。