您的足迹:首页 > 经验技术 >关于c语言的i++和++i

关于c语言的i++和++i

有不少童鞋是大学学习C语言的,而其中提到了i++和++i的问题,经常有人问我i++和++i有什么区别,其实本来没啥必要纠结,但是毕竟天朝嘛,应试教育,有必要写个文章给大家系统地梳理下咯。

一直以来,i++和++i都是个头疼问题,有什么区别?那么我来记录一下...

先看看微软给的解释:

If
Equivalent Action
Return value
++variable
variable += 1
value of variable after incrementing
variable++
variable += 1
value of variable before incrementing

可以看到,两者区别不大,简单说++i是先加后用,i++是先用后加,但是问题出在哪呢?

我们贴一段代码:

int i, j, k;
i = j = 4;
k = i++; // i = 5 ,k = 4
k = ++j; // j = 5 ,k = 5
这样结果应该很明了了,不需多解释了,如果是赋值时候,一定要注意,否则后果很严重。


不过,如果是用在for循环上,有何差异呢?比如:

for(int i=0;i<=5;i++)
{
}
for(int i=0;i<=5;++i)
{
}

其实运行结果是相同的,这里无需纠结。但谷歌的文档是这么写的(山野哥翻译):


- ++i和i++ -
原则:忽略返回值的时候,前缀形式(++i)至少不会比后缀形式效率低,甚至更高,因为后缀形式自加或者自减,需要保存i的原始值作为表达式的值,如果i是迭代器或者其他被标准类型,复制操作的代价可能更大。
所以我们应该尽量使用前缀++形式,特别是使用STL迭代器的情况。

根据谷歌的文档,那我们在循环中还是尽量使用++i。

到此为止,这个i++还是个头疼的问题,那么如何彻底解决这个问题?

答案很简单:

不用它。


i++和++i根据微软的指令都是i+=1,那么何必让这种费脑筋的代码继续霸道呢?我的建议:能分开写就分开写。


如有错误,欢迎指出~

本博客所有文章如无特别注明均为原创。作者:Lance.Moe复制或转载请以超链接形式注明转自 Lance's Blog
原文地址《关于c语言的i++和++i

相关推荐

发表评论

路人甲 表情
看不清楚?点图切换 Ctrl+Enter快速提交

网友评论(4)

谢谢分享
凯博网 8个月前 (2016-08-08) 回复
, 真是不了解,i++和++i这个这么简单的问题为什么还有很多人问?唉,现在的学生哦。
真正应该问题的不是这个,而是由++i和i++引发出来的另一个经典问题,当i=3时(i++)*(i++)和(++i)*(++i)有值。。。
tantan 8个月前 (2016-08-03) 回复
i++是先用后加,而++i是先加后用,道理很好理解的
憧憬Licoy 11个月前 (2016-04-23) 回复
说的太好了,不用它就行了。只是做题怎么办?。。。。。。。。。。。
笑里非刀 1年前 (2015-12-04) 回复