詳解c++指針的指針和指針的引用

轉自http://www.cnblogs.com/li-peng/數組

展現一下使用指針的指針和指針的引用修改傳遞給方法的指針,以便更好的使用它。(這裏說的指針的指針不是一個二維數組)spa

爲何須要使用它們

當咱們把一個指針作爲參數傳一個方法時,實際上是把指針的複本傳遞給了方法,也能夠說傳遞指針是指針的值傳遞。3d

若是咱們在方法內部修改指針會出現問題,在方法裏作修改只是修改的指針的copy而不是指針自己,原來的指針還保留着原來指針

的值。咱們用下邊的代碼說明一下問題:code

 
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; }
 

看一下輸出結果blog

輸出的是兩個2內存

使用指針的指針

展現一下使用指針的指針作爲參數get

 
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)這個方法class

  • 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指向的內容。
相關文章
相關標籤/搜索