我是新来的C语言的结构,所以我的问题可能不符合高标准二维数组VS数组
我们可以使用
struct mat{
int a[10];
};m[10];
,而不是
int mat[10][10];
什么的区别? 哪个更有效?
我是新来的C语言的结构,所以我的问题可能不符合高标准二维数组VS数组
我们可以使用
struct mat{
int a[10];
};m[10];
,而不是
int mat[10][10];
什么的区别? 哪个更有效?
你应该相信与该编译器。但是,根据您的应用,我可能会建议我知道的两种替代方案。
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/
你将不得不m[x].a[y]
这是比较复杂的语法比m[x][y]
,但增加了什么词汇
号这是一个包含数组的结构体。
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]
我认为这里的区别是什么更容易理解。 – Matthew