我是C语言的新手,所以我的问题可能不符合高标准
我们可以使用
struct mat{
int a[10];
};m[10];
而不是
int mat[10][10];
有什么区别? 哪个更有效率?
答案 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/