c语言下标法与指针法,《C和指针》中关于指针与下标的问题

本文探讨了在C语言中,使用数组下标和指针遍历数组时的效率差异。虽然两者在遍历数组时看似相似,但指针通过在编译时计算偏移量,避免了运行时的多次乘法运算,从而提高了效率。在循环中,数组下标会反复计算乘法,而指针仅需一次计算即可。因此,对于按步长遍历数组的操作,使用指针通常更为高效。
摘要由CSDN通过智能技术生成

int array[10],  说明数组元素为整形。

取得a的值,并把它与整形的长度(也就是4)相乘,就是根据下标a,乘以4(整形量所占内存的字节数),所得结果就是下标变量相对数组起始位置的偏移,也就是array[a]所对应的“变量地址”(当然要加上数组基址)

int array[10], a;

for(a = 0; a 

array[a] = 0;

为了对下标表达式求值,编译器在程序中插入指令,取得a的值,并把它与整形的长度(也就是4)相乘。这个乘法需要花费一定的时间和空间。

int array[10], *ap;

for(ap = array; ap 

*ap = 0;

ap++中,++其实就是在ap当前指针所指的位置处,加上一个ap所指元素的类型的长度,这里就是int,即4。也就是1必须与整形的长度(也就是4)相乘,然后再与指针相加。

从这里,貌似两个循环都进行了乘法,好像没有什么差异。可是,你注意到没有2个循环其实是有很大的不同的。不同在哪里呢?

仔细看,会发现数组下标中的a每次的值是不同的,每次a都会与长度4进行相乘,即进行了10次乘法。

再看看指针,你会发现ap++时,是1与长度4进行相乘,再与指针相加。每次执行乘法时,其实就是1*4。这个乘法只在编译时进行了一次运算。程序执行的时候,就没有进行乘法运算,只是简单的将4与指针相加而已。

指针比下标更有效率的一个典型。你会发现在这个场合中 — 当你在数组中1次1步(或某个固定的数字)地移动时,与固定数字相乘的运算在编译时完成,所以运行时所需的指令就少一些。在绝大多数机器上,程序竟会更小一些、更快一些。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值