【发布时间】:2022-10-07 21:20:17
【问题描述】:
我对以下代码的问题:
int main() {
int i = 0;
int array[2][2] = { {1,2} , {3,4}};
for(int j = 0; j<2; j++) {
for(int k = 0; k < 2;k++) {
printf("%d", *(*(*(array+i)+j)+k));
}
printf("\n");
}
}
为什么这不起作用?
我的想法:我有第 i^th 2d 数组(这是 0,因为我只有一个 2d 数组),然后是第 i^th 2d 数组的第 j^th 1d 数组,所以 j 的第 k^th 元素第 i 个 ^th 二维数组的 ^th 1d 数组。
【问题讨论】:
-
你有一个二维数组。通过
sa = *(array + i),您将获得第 i 个一维子数组。通过e = *(sa + j),您可以获得前一维子数组的第 j 个元素。在您的情况下元素e是int类型,因此在添加k后您不能再次取消引用。请记住,*(array + i)类似于array[i]。对于 N 维数组,您将在 N 取消引用后到达基本元素。
标签: c for-loop multidimensional-array implicit-conversion pointer-arithmetic