C/C++日志13
通过数组指针遍历二维数组
对于 二维数组,我们需要处理指向每一行的指针。以下是如何通过数组指针遍历二维数组的示例:
#include <iostream> using namespace std; int main() { int arr[2][3] = {{1, 2, 3}, {4, 5, 6}}; // 定义一个 2x3 的二维数组 int (*ptr)[3] = arr; // 定义一个指向包含 3 个整数的数组的指针,指向 arr 的首行 // 通过数组指针遍历二维数组 for (int i = 0; i < 2; ++i) { // 遍历二维数组的行 for (int j = 0; j < 3; ++j) { // 遍历二维数组的列 cout << *(*(ptr + i) + j) << " "; // 通过指针算术访问每个元素 } cout << endl; } return 0; }
解释:
1.int (*ptr)[3] = arr;: ptr 是一个指针,指向一个包含 3 个整数的数组。初始化为指向 arr 的首行。
2.*(*(ptr + i) + j):
ptr + i 移动到第 i 行。
*(ptr + i) 获取第 i 行的指针(即一个包含 3 个整数的数组)。
*(ptr + i) + j 将偏移量 j 加到行指针上,访问该行的第 j 个元素。
*(*(ptr + i) + j) 解引用该位置,得到元素的值。
输出:
1 2 3
4 5 6
总结:
通过数组指针遍历一维数组,可以通过指针算术操作访问每个元素。
对于二维数组,指针的使用稍微复杂一些,需要首先通过 ptr + i 访问某一行,再通过 *(ptr + i) + j 来访问该行的每个元素。
指针算术为数组的访问提供了灵活的方式,尤其是在处理动态分配的数组时非常有用。