user-0 提问: 用指针访问数组元素比数组下标访问数组元素快？why？

回复:
user: user-1
content: 见c专家编程。

user: user-2
content: 教科书说指针快，但我感觉一样。

user: user-3
content: 不要迷信书、考题、老师、回帖； 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实！  有人说一套做一套，你相信他说的还是相信他做的？ 其实严格来说这个世界上古往今来所有人都是说一套做一套，不是吗？

user: user-4
content: 那是你错觉，下标只不过是一个语法糖。最终的访问方式是一样

user: user-5
content: 谁说的？胡说八道

user: user-6
content: 这个问题压根就不该考虑，有那么大的影响吗？有测试过瓶颈在这里吗？  其实应该考虑为哪种写法更符合项目组大多数成员习惯，以至于定为项目组内部标准。 还要考虑哪种写法更加有利于后期维护。

user: user-3
content: 无profiler不要谈效率！！尤其在这个云计算、虚拟机、模拟器、CUDA、多核 、多级cache、指令流水线、多种存储介质、……满天飞的时代！  不要低估Windows编译器生成Release版时所用优化算法的设计者的智商！

user: user-7
content: 不见得。。。

user: user-3
content: 对学习编程者的忠告： 多用小脑和手，少用大脑、眼睛和嘴，会更快地学会编程！ 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步Debug版对应汇编一行！ 单步Debug版对应汇编千行不如单步Release版对应汇编一行！

user: user-6
content: 引用 6 楼 zhangxiangDavaid 的回复:不对，在Debug下，指针是间接寻址，反而更慢。 汇编说明一切：  	int arr[3] = { 0 }; 00A8D0C8  mov         dword ptr [arr],0   00A8D0CF  xor         eax,eax   00A8D0D1  mov         dword ptr [ebp-10h],eax   00A8D0D4  mov         dword ptr [ebp-0Ch],eax   	int *p = arr; 00A8D0D7  lea         eax,[arr]   00A8D0DA  mov         dword ptr [p],eax   	p[0] = 1; 00A8D0DD  mov         eax,4   00A8D0E2  imul        ecx,eax,0   00A8D0E5  mov         edx,dword ptr [p]   00A8D0E8  mov         dword ptr [edx+ecx],1   	p[1] = 2; 00A8D0EF  mov         eax,4   00A8D0F4  shl         eax,0   00A8D0F7  mov         ecx,dword ptr [p]   00A8D0FA  mov         dword ptr [ecx+eax],2   	p[2] = 3; 00A8D101  mov         eax,4   00A8D106  shl         eax,1   00A8D108  mov         ecx,dword ptr [p]   00A8D10B  mov         dword ptr [ecx+eax],3   	arr[0] = 1; 00A8D112  mov         eax,4   00A8D117  imul        ecx,eax,0   00A8D11A  mov         dword ptr arr[ecx],1   	arr[1] = 2; 00A8D122  mov         eax,4   00A8D127  shl         eax,0   00A8D12A  mov         dword ptr arr[eax],2   	arr[2] = 3; 00A8D132  mov         eax,4   00A8D137  shl         eax,1   00A8D139  mov         dword ptr arr[eax],3     就算有差异，绝大多数应用，不可能在乎这点点性能差异  反而是代码规范、可维护性更重要！

user: user-8
content: 不对，在Debug下，指针是间接寻址，反而更慢。 汇编说明一切：  	int arr[3] = { 0 }; 00A8D0C8  mov         dword ptr [arr],0   00A8D0CF  xor         eax,eax   00A8D0D1  mov         dword ptr [ebp-10h],eax   00A8D0D4  mov         dword ptr [ebp-0Ch],eax   	int *p = arr; 00A8D0D7  lea         eax,[arr]   00A8D0DA  mov         dword ptr [p],eax   	p[0] = 1; 00A8D0DD  mov         eax,4   00A8D0E2  imul        ecx,eax,0   00A8D0E5  mov         edx,dword ptr [p]   00A8D0E8  mov         dword ptr [edx+ecx],1   	p[1] = 2; 00A8D0EF  mov         eax,4   00A8D0F4  shl         eax,0   00A8D0F7  mov         ecx,dword ptr [p]   00A8D0FA  mov         dword ptr [ecx+eax],2   	p[2] = 3; 00A8D101  mov         eax,4   00A8D106  shl         eax,1   00A8D108  mov         ecx,dword ptr [p]   00A8D10B  mov         dword ptr [ecx+eax],3   	arr[0] = 1; 00A8D112  mov         eax,4   00A8D117  imul        ecx,eax,0   00A8D11A  mov         dword ptr arr[ecx],1   	arr[1] = 2; 00A8D122  mov         eax,4   00A8D127  shl         eax,0   00A8D12A  mov         dword ptr arr[eax],2   	arr[2] = 3; 00A8D132  mov         eax,4   00A8D137  shl         eax,1   00A8D139  mov         dword ptr arr[eax],3