十二、指针和引用(二)
1、指针和数组的关系
1)思考
假设你要设计一种编程语言,你要如何实现数组呢?思考之前请先牢记:数组在内存中是连续的,维度由低到高(大部分操作系统下)。
2)汇编分析数组如何实现
[code]//C++代码#include int main(){ int a[5]{}; int* ptrA{ &a[0] }; *ptrA = 5; //通过指针设置数组的值 a[0] = 5; //通过数组下标设置数组的值 a[1] = 5;}//上述代码汇编分析 int a[5]{}; int* ptrA{ &a[0] };00A51840 mov eax,4 //eax=400A51845 imul ecx,eax,0 //imul为乘法,即ecx=eax*0=000A51848 lea edx,[ebp+ecx-1Ch] //edx=ebp+ecx-1Ch=ebp-1Ch00A5184C mov dword ptr [ebp-28h],edx //ptr表示指针,即[ebp-28h]=ebp-1Ch, []中的表示地址 *ptrA = 5; 00A5184F mov eax,dword ptr [ebp-28h] //eax=[ebp-28h] 即eax=ebp-1Ch00A51852 mov dword ptr [eax],5 //[eax]=5,即[ebp-1Ch]=5,即a[0]=5 a[0] = 5;00A51858 mov eax,4 //eax=400A5185D imul ecx,eax,0 //ecx=eax*0=000A51860 mov dword ptr [ebp+eax-1Ch],5 //[ebp+eax-1Ch]=5,即[ebp-1Ch]=5 a[1] = 5;00A51868 mov eax,4 //eax=400A5186D shl eax,0 //shl为左位移,即eax |