#include <iostream>
int main() {
int num1 = 10;
int num2 = 20;
int num3 = 30;
// 定义指针数组,每个指针指向一个整型变量
int* ptrArray[3] = {&num1, &num2, &num3};
// 定义指向指针的指针
int** ptrToPtr = ptrArray;
// 通过指向指针的指针来遍历并输出这些整型变量的值
for (int i = 0; i < 3; ++i) {
std::cout << "Value at index " << i << " is: " << **(ptrToPtr + i) << std::endl;
}
return 0;
}
指针数组和指向指针的指针在内存结构上的不同:
- 指针数组:
- 指针数组是一个数组,数组的每个元素是一个指针。在内存中,指针数组本身占据一段连续的内存空间,其大小为数组元素个数乘以指针的大小(通常在64位系统下指针大小为8字节)。每个指针元素指向相应的变量,这些变量在内存中的位置不一定与指针数组相邻。例如上述代码中
ptrArray
在内存中有一段连续空间存储三个指针,分别指向num1
、num2
、num3
。
- 指向指针的指针:
- 指向指针的指针本身是一个指针,它指向另一个指针。在内存中,指向指针的指针占据一个指针大小的内存空间(通常64位系统下为8字节),它所指向的指针又指向实际的数据。例如上述代码中
ptrToPtr
指向ptrArray
的首地址,通过ptrToPtr
可以间接访问到ptrArray
中的指针,进而访问到实际的整型变量。