2020-11-27(下标寻址和指针寻址)

访问数组的方法有两种:通过下标访问和通过指针访问

指针寻址的方式不但没有下标寻址方式遍历,而且效率也比下标寻址寻址低。
a.由于指针是存放地址数据的变量类型,因此在数据访问的过程中需要先取出指针变量中的数据,然后再针对此数据进行地址偏移计算,从而寻址到目标数据。
b.但数组名本身就是常量地址,可直接针对数组名所替代的地址值进行偏移计算。

char * pchar=NULL;
char szbuff[]="Hello";
mov eax,[String "Hello"(00420030)];
mov dword ptr[ebp-0Ch],eax;
mov cx,word ptr[string "Hello"+4(00420034)];
mov word ptr [ebp-8],cx;

pchar=szbuff;
lea edx ,[ebp-0Ch];
mov dword ptr [ebp-4],edx;

解释一下:
也就是ebp-4 这个地址单元 里面 存放着 ebp-0Ch 这个地址值(并非地址的值,而是地址值)

printf("%c",*pchar)
mov eax,dword ptr[ebp-4];
movsx ecx,byte ptr [eax];
…………
printf("%c",szbuff[0]);
movsx edx;byte ptr [ebp-0Ch];
…………

从上两种访问方式的实现代码来看,指针寻址方式要经过2次寻址才能得到目标数据,而下标寻址方式只需要1次寻址就可以得到目标数据。因此指针寻址比下表寻址多一次寻址操作,效率自然要低。
虽然使用指针寻址方式需要经过2次间接访问,效率要比下标寻址方式低,但其灵活性更强,可修改指针中保存的地址数据,访问其他内存中的数据,而数组下标在没有越界使用的情况下只能访问数组内的数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寻梦&之璐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值