首先将二维数组视为一维连续内存块,通过指针算术遍历;可用指向数组的指针如int (*p)[4] = arr,再结合循环逐行访问元素。

在C++中,指针遍历多维数组的关键在于理解数组的内存布局和指针的算术运算。多维数组在内存中是按行连续存储的,因此可以通过指针按一维方式访问。以下是具体实现方法。
多维数组的内存布局
以二维数组为例:
int arr[3][4] = { {1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12} };这个数组在内存中是连续存储的:1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12。总共有 3×4=12 个 int 类型元素。
使用指针遍历二维数组
可以将二维数组视为一维数组进行指针遍历:
立即学习“C++免费学习笔记(深入)”;
方法一:使用指向数组的指针
int (*p)[4] = arr; // p 指向包含4个int的数组 for (int i = 0; i方法二:使用普通指针进行一维遍历
int *ptr = &arr[0][0]; // 指向首元素 for (int i = 0; i这种方法利用了数组的连续性,将二维数组“展平”为一维视图。
指针算术与类型匹配
注意指针类型对算术运算的影响:
- int *p:p + 1 跳过一个 int(通常是4字节)
- int (*p)[4]:p + 1 跳过一行(4个int,16字节)
错误的指针类型会导致越界或访问错误位置。例如,不能用 int* 直接当二维索引用,但可以用地址强制转换配合偏移计算。
扩展到三维及以上数组
三维数组 int arr[2][3][4] 同样连续存储。可用:
int (*p)[3][4] = arr; for (int i = 0; i或用一维指针遍历:
int *flat = &arr[0][0][0]; for (int i = 0; i基本上就这些。关键是理解数组名在多数情况下会退化为指向首元素的指针,而多维数组的每一维都影响指针的步长。只要类型匹配,指针算术就能正确跳转。不复杂但容易忽略细节。










