指標可指向一般資料(int、double...),也可指向另一個指標(int*、double*...)。指向指標的指標稱為二級指標或指向指標的指標。
int a = 100; int *p1 = &a; // 一級指標 int **p2 = &p1; // 二級指標 int ***p3 = &p2; // 三級指標 int ****p4 = &p3; // 四級指標
每增加一級,定義多一顆星號。實務上常用一、二級,高級極少用。
*p1**p2***p3#include <stdio.h>
int main() {
int a = 100;
int *p1 = &a;
int **p2 = &p1;
int ***p3 = &p2;
printf("%d, %d, %d, %d\n", a, *p1, **p2, ***p3); // 100, 100, 100, 100
printf("&p2=%#X, p3=%#X\n", &p2, p3);
printf("&p1=%#X, p2=%#X, *p3=%#X\n", &p1, p2, *p3);
printf("&a=%#X, p1=%#X, *p2=%#X, **p3=%#X\n", &a, p1, *p2, **p3);
return 0;
}
輸出:
100, 100, 100, 100 &p2=0X28FF3C, p3=0X28FF3C &p1=0X28FF40, p2=0X28FF40, *p3=0X28FF40 &a=0X28FF44, p1=0X28FF44, *p2=0X28FF44, **p3=0X28FF44
***p3 逐層解析***p3 ≡ *(*(*p3)):
*p3 → 取得 p2 的值(即 p1 地址)*(*p3) → 取得 p1 的值(即 a 地址)*(*(*p3)) → 取得 a 的值(100)假設地址:a=0X00A0、p1=0X1000、p2=0X2000、p3=0X3000,形成層層指向鏈結。