数组下标访问和指针访问的效率 < 转 >
2010-03-06 13:27
书上
(C Programing Language)
说指针访问的效率要高一些,原理是:
char test[1024];
指针访问 :
char * lpcSource = test;
for( int i = 0; i < sizeof( test ); i++ ) {
*lpcSource++ = 0;
}
每一次访问是
*lpcSource++ = *(lpcSource+1) = *( (char * )lpcSource + 1)
。
数组下标访问:
for( int i = 0; i < sizeof( test ); i++) {
test[ i ] = 0;
}
每一次访问是
test[ i ] = *(test + i ) = *( (char * )lpcSource + i * 1).
数组下表访问有乘法运算,而指针访问是没有的,大家知道:加减运算天
生第一,乘除法运算比加减慢很多。
但是,这个颇为人们接受的说法在通常情况下是错误的,使用现代产品优化的编
译器,一维数组和指针所产生的代码并不具有显著的差别。数组下标是定义在指
针基础上的,所以优化器常常可以把它转换为更有效率的指针表达形式,并生成
相同的机器指令。(转自《
C
专家编程》)
数组还是必须搞成指针形式,所以直接用指针操作效率要高些。
。
。
。
。
1
、 数组名在大多数表达式中 ( 除使用
sizeof()
和
“ & ”
) 只表示指针常量 , 数组名不
可作为左值使用。
2 、指针与数组的使用非常灵活,操作法 * 和 [] 使用可互换,编译器将 [] 解释为 () 。
3 、 指针和数组在函数调用时是等同的 , 都是作为指针使用 , 它们作为形参毫无区
别。