2d数组vs数组结构

时间:2013-10-20 18:05:17

标签: c

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

我们可以使用

struct mat{

  int a[10];

};m[10];

而不是

int mat[10][10];

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

3 个答案:

答案 0 :(得分:2)

你会m[x].a[y]语法比m[x][y]更复杂但是没有词汇添加

答案 1 :(得分:1)

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

struct mat
{
  int a[10];
};

您可以定义struct的数组:

struct mat m[10];

一步到位:

struct mat{

  int a[10];

}m[10];

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

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

这与2d数组的语法不同,如:

int mat[10][10];

您可以使用mat[i][j]

进行访问

答案 2 :(得分:1)

你应该相信编译器。但是,根据您的申请,我可能会建议两种我认为合适的替代方案。

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

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

vs

  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]);

其中函数应该内联声明并预先形成你必须完成的事情。如果你可以避免这个功能,那就更好了。例如,如果它是一个总和,那么使用它或向量不会改变任何东西。

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