詳解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.0 - 指標和引用指標
- 指標和引用的區別指標
- 【C++系列】指標物件和物件指標的區別C++指標物件
- 指標詳解指標
- c++ 類的函式引用 指標C++函式指標
- c++ 智慧指標用法詳解C++指標
- 指向指標的常量引用瞭解指標
- java的引用:用C++/C的引用和指標去理解JavaC++指標
- 指標常量和常量指標的區別指標
- [C++] 成員函式指標和函式指標C++函式指標
- C/C++引用和指標的聯絡和區別C++指標
- 指標的詳細講解指標
- C++ this 指標C++指標
- C++ 指標C++指標
- C語言指標(三):陣列指標和字串指標C語言指標陣列字串
- C++中的this指標C++指標
- 引用的底層為指標指標
- C++指標的概念解讀 超詳細C++指標
- C++ 學習筆記(3):引用和指標C++筆記指標
- 指標函式 和 函式指標指標函式
- C++中const與指標、引用的總結C++指標
- 指標還沒弄清楚?一篇文章搞定 “地址、指標、指標的指標、引用”,並附程式碼示例,建議收藏!指標
- C++指標理解C++指標
- C++智慧指標C++指標
- c++指標傳遞與引用傳遞C++指標
- jmeter軟體指標和硬體指標(16.5)JMeter指標
- C指標和陣列的關係詳解指標陣列
- 陣列指標,指標陣列陣列指標
- Go 陣列指標(指向陣列的指標)Go陣列指標
- 指標和標籤的基礎理解指標
- C++ 用智慧指標這樣包裝 this 指標是否可行C++指標
- C++ 指標和迭代器支援的操作C++指標
- GO切片傳值/引用/指標Go指標
- 透過指標引用陣列指標陣列
- 指標指標
- c++ 函式指標C++函式指標
- C++(函式指標)C++函式指標
- 指標的用法指標