2d数组vs数组的结构

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

我们可以使用吗

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

代替

 int mat[10][10]; 

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

你应该相信编译器。 但是,根据您的应用,我可能会建议我认为有两种选择。

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

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

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

你会有m[x].a[y]这是比m[x][y]更复杂的语法,但是没有任何词汇表

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

 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]