我是 C 语言新手,所以我的问题可能不符合高标准
我们可以使用
struct mat{
int a[10];
};m[10];
代替
int mat[10][10];
有什么不同?哪个更有效?
我是 C 语言新手,所以我的问题可能不符合高标准
我们可以使用
struct mat{
int a[10];
};m[10];
代替
int mat[10][10];
有什么不同?哪个更有效?
您将拥有m[x].a[y]
比语法更复杂的语法,m[x][y]
但不会在词法上添加任何内容
不,这是一个包含数组的结构。
struct mat
{
int a[10];
};
您可以定义一个结构数组:
struct mat m[10];
一步完成:
struct mat{
int a[10];
}m[10];
请注意,在 m[10] 之前有一个额外的分号,这是不正确的语法。
要访问 arr 中的元素,请使用m[i].a[j]
这在语法上不等同于二维数组,例如:
int mat[10][10];
您可以使用mat[i][j]
你应该相信编译器。但是,我可能会建议 2 个我知道效果很好的替代方案,具体取决于您的应用程序。
1)使用 int a[10][10] 但确保在循环时以正确的顺序访问它们。编译器将“在下面”使用单个数组结构,以便按顺序访问
for( i = 0 ; i < 10 ; i++) {
for (j = 0 ; j < 10 ; j++) {
// do something with a[i][j]
}
}
对比
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/