指針的指針?
前言:
指針的初識點擊移步
雙重指針:
指向指針的指針是一種多級間接尋址的形式,或者說是一個指針鏈。通常,一個指針包含一個變量的地址。當我們定義一個指向指針的指針時,第一個指針包含了第二個指針的地址,第二個指針指向包含實際值的位置。
直接上腳本
#include <stdio.h> int main () { int a = 10; int *p,**pt; p = &a; pt = &p; printf("變量a的內存地址:0x%X\n",&a); printf("變量a存儲的值:%d\n",a); printf("指針p的內存地址:0x%X\n",&p); printf("指針p存儲的地址:0x%X\n",p); printf("指針pt的內存地址:0x%X\n",&pt); printf("指針pt存儲的地址:0x%X\n",pt); }
執行輸出
變量a的內存地址:0x24FE4C 變量a存儲的值:10 指針p的內存地址:0x24FE40 指針p存儲的地址:0x24FE4C 指針pt的內存地址:0x24FE38 指針pt存儲的地址:0x24FE40
由輸出可見,雙重指針pt存儲的地址為指針p的內存地址 即pt = &p ; 單指針之前已經總結過,在此不再贅述;那么*pt,**pt又為何值與指針p的關系是什么?
#include <stdio.h> int main () { int a = 10; int *p,**pt; p = &a; pt = &p; printf("變量a的內存地址:0x%X\n",&a); printf("變量a存儲的值:%d\n",a); printf("指針p的內存地址:0x%X\n",&p); printf("指針p存儲的地址:0x%X\n",p); printf("指針pt的內存地址:0x%X\n",&pt); printf("指針pt存儲的地址:0x%X\n",pt); printf("指針*pt是什么:0x%X\n",*pt); printf("指針**pt是什么:%d\n",**pt); } //變量a的內存地址:0x24FE4C //變量a存儲的值:10 //指針p的內存地址:0x24FE40 //指針p存儲的地址:0x24FE4C //指針pt的內存地址:0x24FE38 //指針pt存儲的地址:0x24FE40 //指針*pt是什么:0x24FE4C //指針**pt是什么:10
等價關系 *pt = p ,**pt = p ;
繪制關系圖如下: