一直不明白为什么指针的访问速度要快于数组的下标的速度,网上查了下 ,做下笔记
(1)
指针的访问速度比数组下标的快的情况:就是使用++运算
for (int i=0;i<size;i++) *(p++)=i; (1)
for(int i=0;i<size;i++) p[i]=i; (2)
对于指针访问速度快,主要是因为很多的机器指令中实现了++运算,他可以使用一个指令周期就完成,
对于数组的下标访问,他需要先获得数组的起始地址,计算偏移量,找到真正的访问地址。
(2)
数组要比指针快的情况:
定义数组a[size] ,*p=a.假如要访问 a[i]
1. 通过 a 访问
系统只需要计算常量 a 与 i*sizeof(type) 之和,然后访问该地址
2. 通过 p 访问
p 是个变量,系统必须先访问 p 的地址,得到 p 的值,然后计算该值 v(p) 与 i*sizeof(type) 之和, 然后再访问得到的地址。
相比之下,(II) 要稍微慢一些(指针慢)。
(3)
大部分情况下数组与指针的速度是相同的,[] 与 *() 是等价的