【问题标题】:Multi-dimensional (2D) Arrays in CC 中的多维 (2D) 数组
【发布时间】:2015-06-16 08:49:43
【问题描述】:

我尝试阅读有关数组及其语法的信息。似乎只有一种方法可以将二维数组键入代码。所以我想在继续之前确定一下。那么,是否可以用数组 [i] [j] 以外的其他语法编写二维数组?

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

【问题讨论】:

  • double pointer 表示指向指针的指针可以像二维数组一样工作。

标签: c arrays syntax


【解决方案1】:

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

  1. 边缘呈锯齿状;您可以有不同长度的不同行。
  2. 内存碎片化,可能会导致性能问题。

另一种方法是使用连续块并使用row * i + j 表示法来访问(i, j) 处的元素。在函数中编码是惯用的。

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

【讨论】:

  • 这个答案完全是误导。 C 中的真实二维数组具有完全相同长度的行,并且是连续分配的。您可能指的是可以用作某种伪数组的指针数组。但是对于编程新手来说,使用这样的东西是非常糟糕的建议。
【解决方案2】:

是的,创建二维数组的推荐和正确方法是array[4][4],这意味着像array[row][column]

array[16] 不代表二维数组,而是一维数组。

这是一个演示数组结构的图像

【讨论】:

【解决方案3】:

要声明一个二维数组,只有下标表示法类似于 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],

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-12
    • 2017-04-04
    • 2013-03-21
    • 2014-06-20
    相关资源
    最近更新 更多