【C语言】i++和++i的区别是什么?哪个效率高?为什么?

写这篇文章主要的目的就是想把看到的一些好的C语言习题摘录下来。


问题一:++i和i++哪个效率更高?

从执行效率分析

理论上,++i的执行效率比i++的执行效率要高。

因为++i 不用生成临时变量,而i++要生成临时变量。

这意味着在翻译成汇编代码时,i++可能需要更多的指令来解释。

当然这个会因编译器有所区别,有的编译器会对这个流程进行优化。

例如直接汇编相应的代码,结果如下:

可以看到它们的执行效率是差不多的。


从执行逻辑分析

i++表示先赋值后加1;i++实现的是,运算结束之后进行自加运算,换句话说这一句跑到分号之后才会有自加效果。

++i表示先加1再赋值;++i正好相反,是在这一句的一开始就进行自加,然后将结果带入运算。


问题二:i++、i+=1和i=i+1哪个效率更高?为什么?

(1)i=i+1最低,它的执行过程如下:
读取右i的地址
i+1
读取左i的地址
将右值传给左边的i(编译器并不认为左右i的地址相同)
(2)i+=1其次,它的执行过程如下:
读取左x的地址
i+1
将得到的值传给i(因为i的地址已经读出)
(3)i++效率最高,其执行过程如下:
读取左i的地址
i+1

相关习题

#include "stdio.h"
#include "string.h"

int a()
{
    static int i =0;
    if(i>=1)
    {
        return ++i;
    }
    return i++;
}

int main()
{
    int A1 = 0;
    int A2 = 0;
    int A3 = 0;

    A1 = a();
    A2 = a();
    A3 = a();

    printf("%d,%d,%d\n",A1,A2,A3);
    getchar();
    return 0;
}

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Evan_ZGYF丶

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

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

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

打赏作者

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

抵扣说明:

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

余额充值