为什么说指针法要比下标法访问数组速度快

bbw2010 2010-01-29 11:20:29
int a[10];
int *p;

下标法,如a[i];
指针法*(a+i)或*(p+i)。

a[i]和*(a+i)在C编译系统中是相同的处理,执行效率一样。

for(p = a;p < (a+10);p++)
printf("%d",*p);
像上面的程序用指针变量直接指向元素,不必每次都重新计算地址,像p++这样的自加操作是比较快的。这种有规律的改变地址p++能提高执行效率。

--------------------

用这段话可以解释吗?有没有其他说法。
...全文
1504 43 打赏 收藏 转发到动态 举报
写回复
用AI写文章
43 条回复
切换为时间正序
请发表友善的回复…
发表回复
biaoge226387282 2011-04-20
  • 打赏
  • 举报
回复
<c指针>
xmu_才盛 2011-04-20
  • 打赏
  • 举报
回复
运行速度应该差不多, 貌似都优化成为一样的汇编码

但是编译速度 肯定指针快,,

根绝编译原理, 直接取下标, 肯定比 匹配[] 然后计算偏移量 ,生成语法树,最后优化 快多了
tianwaifeimao 2011-04-19
  • 打赏
  • 举报
回复
如果纯粹为了解决问题,这点速度上的差异会对程序造成影响吗?我也不懂
陈思有 2011-04-19
  • 打赏
  • 举报
回复
指针可以直接引用地址,而下标要查找地址,就像楼上说的
三月神 2011-04-19
  • 打赏
  • 举报
回复
指针是直接指向地址。
而下标要查找地址。所以指针快
liu_siat 2011-04-18
  • 打赏
  • 举报
回复
快慢要看编译器的处理了
azkabanNULL 2011-04-17
  • 打赏
  • 举报
回复
以前做过一个实验,C#下指针比下表处理能快一倍,规模是640x480的图像,C/C++不清楚,不相信编译优化,规模一大什么问题都出来了
camelisi 2010-02-01
  • 打赏
  • 举报
回复
学习来的
flyerwing 2010-02-01
  • 打赏
  • 举报
回复
学习!
ilwmin 2010-02-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zhao4zhong1 的回复:]
VC6调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编不就啥都明白了吗。
[/Quote]
晕,哥们,你这句话是不是写好了,然后到处乱贴呀.一看就知道是骗分的.
2010-02-01
  • 打赏
  • 举报
回复
稍微有点智商的编译器都可以把这个优化掉,别折腾了……
liudunxu 2010-02-01
  • 打赏
  • 举报
回复
数组法a不变,指针法p变了。
某某9 2010-02-01
  • 打赏
  • 举报
回复
因为数组下标法 其实编译器其实也是转化为指针来计算的。
traceless 2010-02-01
  • 打赏
  • 举报
回复
Faint~~~ 说反了吧

正常情况下,数组快。指针要先读取变量p的地址,然后再取地址里的地址值,最后通过这个取出来的地址值取得
内容

wcgnice 2010-02-01
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 supermegaboy 的回复:]
第二段话从大的结论上可以认为是正确的,但细节有些不足。

应该从这方面来说,先比较一下用p[i]和*p的代码有什么不同:

C/C++ codefor( i=0; i<10;++i )
printf("%d", a[i] );

C/C++ code
q= a+10;for( p= a; p< q;++p )
printf("%d",*p );

两者for循环中的表达式,效率上可以认为基本一样,区别是,a[i]使用等价表达式*( a + i ),明显比*p多了一些计算。
[/Quote]初学觉得这个更合理些吧,有没有哪个大虾给个合理的解释啊
wuyinling1984 2010-02-01
  • 打赏
  • 举报
回复
呵呵 不过哥们说的话还是挺有道理的
febbird1984 2010-01-31
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 diablox0147 的回复:]
就算慢一点又怎么样。。。在现在的电脑下这点速度是可以54的...
[/Quote]
还有很多嵌入式系统的速度不能54的
puzsh 2010-01-31
  • 打赏
  • 举报
回复
学习了~!
do_fork 2010-01-31
  • 打赏
  • 举报
回复
X86平台,数组很容易比指针快,
A[x][y]只要一条指令就能寻址,A[x]更是不在话下了
wangxipu 2010-01-30
  • 打赏
  • 举报
回复
对于程序员来说,区别不大看不出来
现代的PC,这点差别根本没什么两样
加载更多回复(21)

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧