十二、指针和引用

打印 上一主题 下一主题

主题 907|帖子 907|积分 2721

十二、指针和引用(二)

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
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

老婆出轨

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表