#include <stdio.h>
int main() {
int arr[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};
int (*ptr)[4] = arr; // 定义一个指向包含4个int类型元素的数组的指针,并初始化为数组首地址
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 4; j++) {
printf("%d ", *(*(ptr + i) + j)); // 通过指针访问并打印元素
}
printf("\n");
}
return 0;
}
指针与多维数组的关联解释
- 指针类型:
int (*ptr)[4]
定义了一个指针 ptr
,它指向一个包含4个 int
类型元素的数组。因为 arr
是一个二维数组,其每一行可以看作是一个包含4个 int
类型元素的数组,所以 ptr
可以指向 arr
的每一行。
- 指针运算:
ptr + i
:由于 ptr
指向包含4个 int
类型元素的数组,ptr + i
会根据 i
的值移动指针,每次移动的距离是一行的大小(即4个 int
类型元素的大小),这样 ptr + i
就指向了 arr
的第 i
行。
*(ptr + i)
:对 ptr + i
进行解引用,得到第 i
行的首地址,此时它等价于 arr[i]
,类型为 int*
。
*(ptr + i) + j
:在第 i
行的首地址基础上,加上 j
,就指向了第 i
行第 j
列的元素。
*(*(ptr + i) + j)
:再次解引用,就得到了第 i
行第 j
列的具体元素值。