为何使用i++后程序陷入无限循环,而++i可正常运行?
为什么
i = i++会导致无限循环,而i = ++i能正常执行? 先拆解问题核心:你代码里的关键问题出在i = i++这一行,我们分别看两种自增运算符的行为,就能明白差异:
后自增
i++的执行逻辑:
后自增的规则是:先返回变量当前的原始值,再将变量自身加1。但当你写i = i++时,整个操作的实际流程是:- 读取
i的当前值(比如第一次循环时是0),作为i++的返回结果; - 将
i的值加1(此时i变成1); - 执行赋值操作,把第一步得到的原始值(0)重新赋给
i。
这么一来,i绕了一圈又回到了初始值,永远满足i < 5的循环条件,自然陷入无限循环。
- 读取
前自增
++i的执行逻辑:
前自增的规则是:先将变量自身加1,再返回更新后的变量值。执行i = ++i时:- 先把
i的值加1(第一次循环时从0变成1); - 返回更新后的
i的值(1); - 将这个值赋给
i,最终i的值就是1。
每次循环i都会正常递增,直到i等于5时退出循环。
- 先把
额外说明:严格来说,在C/C++标准中,i = i++这种在同一表达式中对同一变量同时进行读取和修改,且没有明确序列点的操作属于未定义行为——不同编译器可能有不同的执行顺序,但在绝大多数常用编译器中,都会出现上述的无限循环现象。
内容的提问来源于stack exchange,提问作者Varun Sahu
相关产品推荐
相关产品推荐

