在 C 中访问二维数组的哪种方法最有效? (使用指针)
Which method for accessing a 2D array in C is most effective? (Using Pointers)
如果您有一个接受数组指针的函数,那么使用指向数组中每个元素的指针是否有任何用处,还是多余的?例如:
int sum(int(*arr)[3]) {
int i,j, sum = 0;
for (i =0; i < ROW ; i ++) {
for (j =0; j < COL ; j ++) {
sum = sum + *(*( arr +i )+j);
}
}
}
在这种情况下使用 arr[i][j] 是否相同?
标准要求 arr[i]
等同于 *(arr + i)
所以不,不使用更具可读性的 arr[i]
是没有意义的。
加速二维数组访问是一个复杂的话题。有一些提高性能的技术,但那些考虑硬件架构(例如缓存)的技术与访问模式有关,而不是访问语法。
如果您有一个接受数组指针的函数,那么使用指向数组中每个元素的指针是否有任何用处,还是多余的?例如:
int sum(int(*arr)[3]) {
int i,j, sum = 0;
for (i =0; i < ROW ; i ++) {
for (j =0; j < COL ; j ++) {
sum = sum + *(*( arr +i )+j);
}
}
}
在这种情况下使用 arr[i][j] 是否相同?
arr[i]
等同于 *(arr + i)
所以不,不使用更具可读性的 arr[i]
是没有意义的。
加速二维数组访问是一个复杂的话题。有一些提高性能的技术,但那些考虑硬件架构(例如缓存)的技术与访问模式有关,而不是访问语法。