在 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
找到目标数据。这种间接性使得双重指针可以更加灵活地处理复杂的数据结构,例如链表、树等。