2d数组vs数组结构

the*_*nav 8 c

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

我们可以使用吗

struct mat{

  int a[10];

};m[10];
Run Code Online (Sandbox Code Playgroud)

代替

int mat[10][10];
Run Code Online (Sandbox Code Playgroud)

有什么不同?哪个更有效率?

Seb*_*ien 1

你应该信任编译器。不过,我可能会建议两种我知道效果很好的替代方案,具体取决于您的应用。

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

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

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

就性能而言是不同的。后者的性能更高。

2) 选项 1 需要额外小心并且是违反直觉的。我更喜欢做

   int a[100]
Run Code Online (Sandbox Code Playgroud)

并做

   for( i = 0 ; i < 100 ; i++)
      inline_function(a[i]);
Run Code Online (Sandbox Code Playgroud)

其中函数应该被声明为内联并执行你必须做的事情。如果你能避免这个函数,那就更好了。例如,如果它是一个总和,那么将其设为 2d 或向量不会改变任何内容。

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