c语言数组下标和指针,C语言 数组 下标与指针 效率解析

以字符串拷贝函数为例,解析数组中下标与指针的效率情况。

指针的效率至少和下标相同。(原因参考C下标的实现原理,注意编译器差异,因为部分编译器针对下标设置了特殊汇编指令,不做考虑)

#define SIZE 50

int x[SIZE];

int y[SIZE];

int i;

int *p1,*p2;

1:使用下标方案

void strcpy()

{

for(i=0;i

x[i] = y[i];

}

2:改用指针方案

void strcpy()

{

for(p1 = x,p2 = y; p1-x

}

3:只用计数器方案

void strcpy()

{

for(i = 0, p1 =x, p2= y; i

*p1++ = *p2++;

}

4:寄存器方案

void strcpy()

{

register int *p1, *p2, i;

for(i = 0, p1=x ,p2 = y;i

*p1++ = *p2++;

}

5:消除计数器

void strcpy()

{

register int *p1,*p2;

for(p1 = x, p2= y; p1< &x[SIZE];*p1++= *p2++);

}

以上5中实现,前三种性能基本相同,第四种稍好,第五种最高(基本上无法再提高了)。

注意:性能和可读性难以兼得,性能要求不高,建议第一种,直接明了;对于性能要求极高,比如实时性系统,只建议第五种。

------------------------------------------

C库的字符串复制函数实现如下:

void strcpy(char *buffer, char const *string)

{

while(*buffer++ = *string++) != '\0');

}

更加简洁和高效,原因是充分利用了字符串结尾的'\0'标志。也由此给大家一个建议,如果是自定义类型的数组,不妨也设一些结束标志,以便编写操作函数时方便。类似的如字符串数组就以NUL(不是NULL)作为结束标志。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值