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

C 語言多級指針詳解:二級指針、三級指針與內存布局圖解

     編輯:關於C語言

二級指針

指向指針的指針,常用於:函數修改一級指針值、動態分配二維數組、命令行參數 char** argv。

int i = 0;
int *p = &i;
int **pp = &p;
**pp = 100; // 修改 i
printf("i=%d\n", i); // 100

內存布局示意

i (int)      地址: 0x7ffe...  值: 100
p (int*)     地址: 0x7ffe...  值: &i
pp (int**)   地址: 0x7ffe...  值: &p
*pp  = p     = &i
**pp = *p    = i

每級指針大小相同(64 位 8 字節),區別在於解引用層數與指向類型。

三級/多級指針

int ***ppp = &pp;
***ppp = 200; // 同樣修改 i
// 實際工程中超過二級極少見,邏輯極難維護

完整演示代碼

#include <stdio.h>
int main() {
    int i = 0;
    int *p = &i;
    int **pp = &p;
    int ***ppp = &pp;

    **pp = 100;
    printf("i = %d\n", i);
    printf("&i = %p\n", &i);
    printf("p  = %p\n", p);
    printf("&p = %p\n", &p);
    printf("pp = %p\n", pp);
    printf("&pp = %p\n", &pp);
    printf("*pp = %p\n", *pp);
    printf("**pp = %d\n", **pp);
    printf("ppp = %p, *ppp = %p\n", ppp, *ppp);
    return 0;
}

運行結果示例

i = 100
&i = 0x7ffd1234567c
p  = 0x7ffd1234567c
&p = 0x7ffd12345670
pp = 0x7ffd12345670
&pp = 0x7ffd12345668
*pp = 0x7ffd1234567c
**pp = 100
ppp = 0x7ffd12345668, *ppp = 0x7ffd12345670

核心理解

  • T *p 指向 T;T **pp 指向 T*;以此類推。
  • 每級間接訪問增加一次解引用(*)。
  • 多級指針本質是**指針鏈**,內存中形成指向指向...指向數據的層層鏈接。
  • 實際開發中,**二級指針已足夠 99% 場景**(修改指針參數、二維數組、字符串數組),三級以上極少直接使用,通常封裝在庫內部。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved