【问题标题】:Two-dimensional C array [closed]二维 C 数组
【发布时间】:2012-06-30 20:21:40
【问题描述】:

我正在制作一个连续四个应用程序,或者,至少是一个计算最佳动作和东西的类。游戏板的高度为 6,宽度为 7。我不确定是否应该将实例变量命名为 gamePosition[6][7]gamePosition[7][6]。我知道我会使用哪一个并不重要,但是一个比另一个更常见吗?我想立即以正确的方式做到这一点。

【问题讨论】:

  • 如果您需要数学家的建议:先使用 X 维度,然后使用 Y 维度,所以列 * 行,所以 gamePosition[7][6]。
  • 高度对应于行数,所以我更喜欢gamePosition[6][7];。不过,这真的在这里并不重要。
  • @H2CO3 嗯?在我学习的地方,尺寸以行×列的形式给出。
  • 我投票结束;前两个答案是矛盾的,但都没有错。真正的答案是;没关系(至少在这种情况下)。
  • 投票重新开放。即使答案是“没关系”,这仍然是一个很好的问题。

标签: c arrays multidimensional-array


【解决方案1】:

C 二维数组只是数组的数组。

为清楚起见添加一些常量:

#define ROWS 6
#define COLUMNS 7

如果您希望能够将一行视为单个对象,请使用:

someType gamePosition[ROWS][COLUMNS];

所以gamePosition[0] 是一个表示第一(零)行的一维数组。

如果您希望能够将 视为单个对象,请使用:

someType gamePosition[COLUMNS][ROWS];

如果你只关心单个元素,你可以用任何一种方式定义它(当然你必须保持一致)。将板视为行数组而不是列数组可能更直观一些,但两者都可以。

【讨论】:

    【解决方案2】:

    宽度 - 第一个方括号。 高度 - 第二个方括号。

    选择哪个选项并不重要。您的代码应该是易于理解和直观的。

    【讨论】:

      【解决方案3】:

      这完全取决于你。这里没有“更常见”或“正确”的方式。

      • 如果您更愿意将游戏板视为笛卡尔坐标平面,那么[column][row] 格式会更好,因为既定的数学惯例是先指定横坐标,然后指定纵坐标。

        李>
      • 如果您更愿意将其视为矩阵,那么它会反过来,因为在索引矩阵时已建立的数学实践是将行索引放在第一位,列索引放在第二位。

      附:当然,针对该问题的唯一真正的解决方案是编写代码,以便以后您可以通过在代码的一个位置进行一次本地修改来在这两种方法之间切换:)

      【讨论】:

        【解决方案4】:

        语义无关紧要,但有一些关于性能的提示:当您将遍历板上的单元格时,首先增加第二个索引,然后再增加第一个索引。那就是:

        for (i = 0; i < FIRST_SIZE; ++i)
          for (j  = 0; j < SECOND_SIZE; ++j)
            ... process gamePosition[i][j] ...
        

        由于缓存局部性,您将在性能上获胜。

        所以也许你应该根据你的算法计划哪个索引是第一个。

        【讨论】:

          【解决方案5】:

          正如之前的一些帖子,这并不重要,但它确实很重要。

          首先。从逻辑上讲,它不会影响您的代码,您可以随意选择一个。但是在正常的思维中,你经常写gamePosition[6][7],因为你经常从上到下,从左到右;)

          第二我认为你需要这个。这取决于你如何使用这个数组。我会解释:

          二维数组只是数组的数组。而且,因为性能,如果您浏览数组中的所有值,通常逐行更有效。例如:你有a[n][m]

          你应该:(逐行)

          for(int i=0; i<n; i++)
              for(int j=0; j<m; j++)
                  // do some stuff
          

          而不是:(逐列)因为你会失去性能

          for(int i=0; i<m; i++)
              for(int j=0;j<n; j++)
                  // do some stuff
          

          所以。你可以在你的游戏中思考,你可以思考如何使用你的数组: 如果您更频繁地从上到下使用(俄罗斯方块游戏 - 是我的算法的一个示例),您应该使用gamePosition[7][6]

          否则,您更频繁地逐行浏览数组(大部分时间),应该使用gamePosition[6][7]

          很少有人知道这一点。希望对您有所帮助;)

          【讨论】:

            【解决方案6】:

            人们期望高 x 宽和行 x 列,所以你应该使用:

            gamePosition[6][7]
            

            实际上我认为这很重要。您应该使用这两种可能性中最直观的一种,以免使读者感到困惑。

            【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-11-23
            • 1970-01-01
            • 2011-08-15
            • 2011-06-26
            相关资源
            最近更新 更多