在 C++ 中,雙重指針是指一個指針變量指向另一個指針變量,而后者又指向一個數據對象。這種結構通常用于處理二維數組、鏈表等復雜數據結構。
雙重指針的間接性指的是,通過雙重指針訪問目標數據的方式需要通過中間指針進行兩次間接尋址。第一次間接尋址是通過第一個指針找到第二個指針,第二次間接尋址是通過第二個指針找到目標數據。
例如,下面是一個使用雙重指針訪問二維數組的例子:
int arr[3][4] = { {1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12} };
int** p = arr; // p 指向第一行的首地址
int* q = p[0]; // q 指向第一行的第一個元素的地址
int x = *q; // x 等于 1,即數組的第一個元素
在上面的例子中,我們首先定義了一個二維數組 arr
,然后定義了一個指向行指針的指針 p
,它指向了第一行的首地址。接著,我們定義了一個指向整數的指針 q
,它指向了第一行的第一個元素的地址。最后,我們通過 *q
訪問了數組的第一個元素,即 x = 1
。
從上面的例子可以看出,通過雙重指針訪問目標數據的方式需要兩次間接尋址,即通過 p
找到 q
,再通過 q
找到目標數據。這種間接性使得雙重指針可以更加靈活地處理復雜的數據結構,例如鏈表、樹等。