我是C语言新手,所以我的问题可能不符合高标准。
我们能用吗
struct mat{
int a[10];
};m[10];而不是
int mat[10][10];有什么区别吗?哪一个更有效率?
发布于 2013-10-20 18:16:08
您应该信任编译器。但是,我可能会根据您的应用程序,提出两个我知道的效果很好的方案。
1)使用int a10,但确保在循环时按正确的顺序访问它们。编译器将“在下面”使用按顺序进行访问的单个数组结构。
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/
发布于 2013-10-20 18:08:53
您将使用m[x].a[y],它的语法比m[x][y]复杂,但在词汇上没有添加任何内容。
发布于 2013-10-20 18:09:37
不是的。这是一个包含数组的结构。
struct mat
{
int a[10];
};您可以定义一个结构数组:
struct mat m[10];一步一步地做:
struct mat{
int a[10];
}m[10];注意,在之前有一个额外的分号,这是不正确的语法。
要访问arr中的元素,可以使用m[i].a[j]
这在语法上并不等同于2d数组,如下所示:
int mat[10][10];可以使用mat[i][j]访问
https://stackoverflow.com/questions/19480911
复制相似问题