2013-10-20 159 views
8

我是新来的C语言的结构,所以我的问题可能不符合高标准二维数组VS数组

我们可以使用

struct mat{ 

    int a[10]; 

};m[10]; 

,而不是

int mat[10][10]; 

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

+6

我认为这里的区别是什么更容易理解。 – Matthew

回答

1

你应该相信与该编译器。但是,根据您的应用,我可能会建议我知道的两种替代方案。

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

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

其中函数应该内联声明和预制品,你必须这样做的东西。如果你能避免这个功能,那就更好了。例如,如果它是一个总和,让它变成2d或向量不会改变任何东西。

编辑:这是在细节有关阵列顺序位解释参考:http://www.cplusplus.com/doc/tutorial/arrays/

2

你将不得不m[x].a[y]这是比较复杂的语法比m[x][y],但增加了什么词汇

1

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

struct mat 
{ 
    int a[10]; 
}; 

您可以定义结构数组:

struct mat m[10]; 

要做到这一点在一个步:

struct mat{ 

    int a[10]; 

}m[10]; 

注意你米之前有一个多余的分号 [10]这是不正确的语法。

要访问ARR的元素,你可以使用m[i].a[j]

这并不等于在语法上的二维数组,如:

int mat[10][10]; 

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