【问题标题】:2d array vs structure of an array二维数组与数组结构
【发布时间】:2013-10-20 18:05:17
【问题描述】:

我是 C 语言新手,所以我的问题可能不符合高标准

我们可以使用

struct mat{

  int a[10];

};m[10];

而不是

int mat[10][10];

有什么区别? 哪个更高效?

【问题讨论】:

  • 我认为这里的区别在于更容易理解。

标签: c


【解决方案1】:

m[x].a[y] 的语法比 m[x][y] 更复杂,但不会在词法上添加任何内容

【讨论】:

    【解决方案2】:

    您应该相信编译器。但是,根据您的应用,我可能会建议 2 个我知道效果很好的替代方案。

    1) 使用 int a[10][10] 但确保在循环时以正确的顺序访问它们。编译器将“在下面”使用单个数组结构,以便按顺序访问

      for( i = 0 ; i < 10 ; i++) {
         for (j = 0 ; j < 10 ; j++) {
             // do something with a[i][j]
         }
      }
    

    对比

      for( i = 0 ; i < 10 ; i++) {
         for (j = 0 ; j < 10 ; j++) {
             // do something with a[j][i]
         }
      }
    

    在性能方面有所不同。后者的性能更高。

    2) 选项 1 需要格外小心且违反直觉。我更喜欢这样做

       int a[100]
    

    然后做

       for( i = 0 ; i < 100 ; i++)
          inline_function(a[i]);
    

    函数应该在哪里声明为内联并执行你必须做的事情。如果您可以避免该功能,那就更好了。例如,如果它是一个总和,让它 2d 或向量不会改变任何东西。

    编辑:这是一个参考,详细解释了有关数组顺序的位:http://www.cplusplus.com/doc/tutorial/arrays/

    【讨论】:

      【解决方案3】:

      没有。 这是一个包含数组的结构体。

      struct mat
      {
        int a[10];
      };
      

      你可以定义一个struct数组:

      struct mat m[10];
      

      一步到位:

      struct mat{
      
        int a[10];
      
      }m[10];
      

      请注意,您在 m[10] 之前有一个额外的分号,这是不正确的语法。

      要访问 arr 中的元素,请使用 m[i].a[j]

      这在语法上不等同于二维数组,例如:

      int mat[10][10];
      

      您可以使用mat[i][j]访问它

      【讨论】:

        猜你喜欢
        • 2012-02-28
        • 2023-03-18
        • 1970-01-01
        • 1970-01-01
        • 2017-03-24
        • 1970-01-01
        • 1970-01-01
        • 2011-12-18
        • 2021-09-22
        相关资源
        最近更新 更多