首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> C++ 入門

C++ 指針進階(六):指針的指針(雙重指針)詳解

     編輯:C++ 入門

聲明與初始化

char a = 'z';
char* b = &a;        // 一級指針
char** c = &b;       // 二級指針:指向 char* 的指針

內存佈局圖解

c (地址 8092)  ──→  b (地址 7230)  ──→  a (地址 7230, 值 'z')
  char**                char*                char
  • c 類型 char**,值 8092(假設)。
  • *c 即 b,類型 char*,值 7230。
  • **c 即 a,類型 char,值 'z'。

典型用途

  1. 修改一級指針的值(如函數內分配內存並返回):
    void alloc(int** pp, int n) { *pp = new int[n]; }
    int* p; alloc(&p, 10); // p 被修改指向新內存
  2. 二維動態數組:int** mat = new int*[rows]; for(i) mat[i]=new int[cols];
  3. 命令行參數:int main(int argc, char** argv)。
  4. COM 接口指針:IUnknown** ppv 用於 QueryInterface 返回接口指針。

三級及以上指針

語法同理:int*** ppp。實際工程中**極少超過二級**,三級通常意味著設計過度複雜,應重構。

常見錯誤

  • char** c = &a; ❌ 類型不匹配(&a 是 char*)。
  • 解引用未初始化的二級指針 → 崩潰。
  • 忘記釋放二維數組每行再釋放行指針數組 → 內存洩漏。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved