程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 詳解c++指針的指針和指針的引用

詳解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指向的內容。  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved