C中的多维(2D)数组

时间:2015-06-16 08:49:43

标签: c arrays syntax

我试着阅读有关数组及其语法的内容。似乎只有一种方法可以在代码中键入二维数组。所以我想在继续之前确定。那么,是否有可能用不同于array [i] [j]的不同语法编写二维数组?

示例:如果我有数组[4] [4],是否可以键入数组[16]而不是通常的方式?是否被认为是一个二维数组?

3 个答案:

答案 0 :(得分:2)

请注意,建模允许您使用[][]进行索引的二维数组会受到

的影响
  1. 边缘是锯齿状的;你可以拥有不同长度的不同行。
  2. 内存碎片化可能会导致性能问题。
  3. 另一种方法是使用连续的块并使用row * i + j表示法访问(i, j)处的元素。在函数中编码是惯用的。

    所以我建议做后者。如果需要,您始终可以将实现切换回锯齿状内存;保留您已编写的功能原型。

答案 1 :(得分:2)

是推荐的,创建2D数组的正确方法是array[4][4],这意味着array[row][column]

array[16]不代表2D数组,而是1D数组。

这是一个演示阵列结构的图像

enter image description here

答案 2 :(得分:0)

要声明二维数组,只有下标符号类似于arr [] []。 2D数组仅用于简化元素的访问,

二维数组的指针表达式:

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],