我是C语言的新手,所以我的问题可能达不到高标准
我们可以使用吗
struct mat{
int a[10];
};m[10];
Run Code Online (Sandbox Code Playgroud)
代替
int mat[10][10];
Run Code Online (Sandbox Code Playgroud)
有什么不同?哪个更有效率?
你应该信任编译器。不过,我可能会建议两种我知道效果很好的替代方案,具体取决于您的应用。
1) 使用 int a[10][10] 但确保在循环时以正确的顺序访问它们。编译器将“在下面”使用单个数组结构,因此按顺序访问
for( i = 0 ; i < 10 ; i++) {
for (j = 0 ; j < 10 ; j++) {
// do something with a[i][j]
}
}
Run Code Online (Sandbox Code Playgroud)
与
for( i = 0 ; i < 10 ; i++) {
for (j = 0 ; j < 10 ; j++) {
// do something with a[j][i]
}
}
Run Code Online (Sandbox Code Playgroud)
就性能而言是不同的。后者的性能更高。
2) 选项 1 需要额外小心并且是违反直觉的。我更喜欢做
int a[100]
Run Code Online (Sandbox Code Playgroud)
并做
for( i = 0 ; i < 100 ; i++)
inline_function(a[i]);
Run Code Online (Sandbox Code Playgroud)
其中函数应该被声明为内联并执行你必须做的事情。如果你能避免这个函数,那就更好了。例如,如果它是一个总和,那么将其设为 2d 或向量不会改变任何内容。
编辑:这里是一个参考,详细解释了有关数组顺序的位:http://www.cplusplus.com/doc/tutorial/arrays/
| 归档时间: |
|
| 查看次数: |
693 次 |
| 最近记录: |