【发布时间】:2011-01-25 18:35:40
【问题描述】:
您好,我现在正在上 C 中级班,我突然想到了这个想法:
int multi[3][4]; // const multidimensional array
int* ptr = *multi; // ptr is a pointer variable that hold the address of multi const array
那么,对于访问多维数组位置,什么更快/更小/优化?
这个:
multi[3][1]; // index the value position
或
*(*(multi+2)+1); // pointer to the position on the array
或(已更新)
ptr += 9; // pointer arithmetic using auxiliary pointer
由于“multi”是一个 const 数组,编译器应该已经“知道”元素位置的本地化,如果使用指向该数组的变量指针可能需要更多的处理时间,另一方面可能会更快搜索我要显示的项目时。什么是更快/更小/优化的方法?
提前谢谢你。
【问题讨论】:
-
你应该更关心代码的可读性。大多数人没有意识到你不能回答关于 C 的“纳米”性能比较。你可以回答这样的问题,但你必须指定一个实现(或一组实现)。
-
使其可读。即使 如果 有性能提升 - 我怀疑有 - 使用可读版本。 “过早的优化是万恶之源。” -克努斯
-
C 已经是一种很难使用的语言。为什么要让它变得更难?
-
好吧,应该有人对我的教授这么说。他的话:1.*(ptr+1)是作弊; 2. 你不应该使用 arr[row][col];等
-
@Maris Melo:叹息。这是反对使用 C 作为教学语言的又一个论据。已经制度化的民间传说、错误信息和明显的不良做法的数量是惊人的。这么多学生对C有问题的原因是因为它通常教得不好。告诉你的教授编写代码并分析不同的版本;他可能会对结果感到惊讶。
标签: c arrays pointers pointer-arithmetic