【C语言指针】用指针提升数组的运算效率

原本代码

static void test()
{
	size_t size = 500 * pow(1024, 2);
    uint8_t *data = (uint8_t *)malloc(size);
    size_t x;

    clock_t start, end;
    start = clock();

    for(x = 0; x < size; ++x) {
        data[x] = 0x41;
    }

    end = clock();
    printf("%lf seconds\n",(double)(end - start) / CLOCKS_PER_SEC);
}
经过十次的执行,取平均值为1.9628

修改后代码

static void test()
{
    size_t size = 500 * pow(1024, 2);
    uint8_t *data = (uint8_t *)malloc(size);
    size_t x;

    clock_t start, end;
    start = clock();

    for(x = 0; x < size; ++x) {
        *data = 0x41;
        data++;
    }

    end = clock();
    printf("%f seconds\n",(double)(end - start) / CLOCKS_PER_SEC);
}
经过十次执行,取平均值为1.8914

可以看到平均下来指针比使用下标的方式要快上近0.1秒,你可能会说就100毫秒有啥好优化的。
那是因为你接触到的项目不够大,如果在一个大型项目上面还是只使用数组下标的话,就比较容易导致整个项目的节奏被某些函数或运算给拖后腿。

最后如果你是一个不够了解指针或C语言的人可能会注意到一个现象。
那就是后续使用printf函数无法输出上面这个data变量,输出结果是什么也没有。

那是因为指针已经指向了这个变量的最后一个值的下一个值。
简单来说就是p = data[(n - 1) + 1];
p是指针指向的值,n是变量长度。

要解决这个问题只需要使用另一个指针来在一开始指向这个data变量,然后后续的运算都用此新指针。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值