追求真理:++i为何比i++执行效率高

本文探讨了C语言中++i与i++的区别,指出++i在某些情况下可能具有更高的执行效率,这源于编译器对副作用和顺序点的理解。虽然不同编译器的处理方式可能造成结果不一致,但在没有后续使用i的情况下,现代编译器可以优化掉i++的额外步骤,使得两者效率相当。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景

相信很多人遇到过这样的问题:printf("%d,%d",i++,++i);

也纠结过这个问题,到底答案是什么。却没有一个参考的资料。唯一知道的是,几乎所有C语言教材都这么讲:i++就是先使用i的值再使i自身加一,而++i则是先使i自身加一,然后再使用i的值。出于对真理的追求。今天我们彻底弄明白此问题。

譬如这样的话:

int a,b;int i=10,j=10;a=i++;b=++j;

我们可以很清楚的知道a和b的值分别将是10和11。这点毫无疑问,因为无论在任何平台任何编译器上运行都是这个结果!

然而对于这样的程序:
​​​​​

int a,b;int i=10,j=10;a=(i++)+(i++)+(i++);b=(++j)+(++j)+(++j);

各位试想答案将是多少?

我们可以放到编译器上运行看一下结果如下:

先看看windows下常用的VC6结果:

 

恩看到了,是30和37!嗯,但..这个结果好像有点怪。

那再看看Linux下gcc的结果:

哦,竟然也是30&nb

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值