【发布时间】:2015-06-16 08:49:43
【问题描述】:
我尝试阅读有关数组及其语法的信息。似乎只有一种方法可以将二维数组键入代码。所以我想在继续之前确定一下。那么,是否可以用数组 [i] [j] 以外的其他语法编写二维数组?
示例:如果我有 array[4][4],是否可以键入 array[16] 而不是通常的方式?它被视为二维数组吗?
【问题讨论】:
-
double pointer表示指向指针的指针可以像二维数组一样工作。
我尝试阅读有关数组及其语法的信息。似乎只有一种方法可以将二维数组键入代码。所以我想在继续之前确定一下。那么,是否可以用数组 [i] [j] 以外的其他语法编写二维数组?
示例:如果我有 array[4][4],是否可以键入 array[16] 而不是通常的方式?它被视为二维数组吗?
【问题讨论】:
double pointer 表示指向指针的指针可以像二维数组一样工作。
请注意,对允许您使用 [][] 进行索引的二维数组进行建模会遇到
另一种方法是使用连续块并使用row * i + j 表示法来访问(i, j) 处的元素。在函数中编码是惯用的。
所以我建议做后者。如果需要,您可以随时将实现切换回锯齿状内存;保留您已经编写的函数原型。
【讨论】:
是的,创建二维数组的推荐和正确方法是array[4][4],这意味着像array[row][column]。
array[16] 不代表二维数组,而是一维数组。
这是一个演示数组结构的图像
【讨论】:
要声明一个二维数组,只有下标表示法类似于 arr[][]。 二维数组只是为了简化元素的访问,
二维数组的指针表达式:
the array name itself is a pointer to first sub array,
arr:
will be pointer to first sub array, not the first element of first sub
array, according to relationship of array & pointer, it also represent
the array itself,
arr+1:
will be pointer to second sub array(row), not the second element of first sub(row)
array,
*(arr+1):
will be pointer to first element of second sub array(row),
according to relationship of array & pointer, it also represent second sub array(row), same as arr[1],
*(arr+1)+2:
will be pointer to third element of second sub array(row),
*(*(arr+1)+2):
will get value of third element of second sub array(row),
same as arr[1][2],
【讨论】: