小朋友學C語言(41):二級指標與多級指標
一、二級指標
指向指標的指標是一種多級間接定址的形式,或者說是一個指標鏈。通常,一個指標包含一個變數的地址。當我們定義一個指向指標的指標時,第一個指標包含了第二個指標的地址,第二個指標指向包含實際值的位置。

1.jpg
一個指向指標的指標變數必須如下宣告,即在變數名前放置兩個星號。例如,下面聲明瞭一個指向 int 型別指標的指標:
int **p;
當一個目標值被一個指標間接指向到另一個指標時,訪問這個值需要使用兩個星號運算子,如下面例項所示。
#include <stdio.h> int main () { int a; int *ptr; int **pptr; a = 100; /* 獲取 a 的地址 */ ptr = &a; /* 使用運算子 & 獲取 ptr 的地址 */ pptr = &ptr; /* 使用 pptr 獲取值 */ printf("Value of a = %d\n", a); printf("Value available at *ptr = %d\n", *ptr ); printf("Value available at **pptr = %d\n", **pptr); return 0; }
執行結果:
Value of a = 100 Value available at *ptr = 100 Value available at **pptr = 100
可以進一步檢視一下指標的地址:
#include <stdio.h> int main () { int a; int *ptr; int **pptr; a = 100; /* 獲取 a 的地址 */ ptr = &a; /* 使用運算子 & 獲取 ptr 的地址 */ pptr = &ptr; /* 使用 pptr 獲取值 */ printf("Value of a = %d\n", a); printf("Value available at *ptr = %d\n", *ptr ); printf("Value available at **pptr = %d\n", **pptr); printf("\nAddress of a is %p\n", &a); printf("Address of *ptr is %p\n", &(*ptr)); printf("Address of **ptr is %p\n\n", &(**pptr)); printf("Address of ptr is %p\n", &ptr); printf("Address of pptr is %p\n", &pptr); return 0; }
執行結果:
Value of a = 100 Value available at *ptr = 100 Value available at **pptr = 100 Address of a is 0061ff0c Address of *ptr is 0061ff0c Address of **ptr is 0061ff0c Address of ptr is 0061ff08 Address of pptr is 0061ff04
二、多級指標
既然有一級指標和二級指標,就有三級指標、四級指標、五級指標……
以三級指標為例,三級指標是“指標的指標的指標”,或者叫“指向‘指向指標的指標’的指標”。
因為多級指標不好理解,並且在程式設計時容易寫錯,所以建議儘量不要使用二級以上的指標。