前置自增(++i)返回加1后的值,后置自增(i++)返回加1前的值;二者均使变量i加1,但表达式值不同,影响赋值、函数调用等场景。

核心区别不在“变量最终是否加1”,而在于表达式求值时返回的是哪个值:前置自增(++i)返回加1后的值;后置自增(i++)返回加1前的值。变量本身在两种情况下都完成自增,但参与赋值、比较或计算的“表达式结果”不同。
看赋值行为最直观
这是最容易观察差异的场景:
-
int i = 5; int x = ++i;→i变成 6,x也等于 6 -
int i = 5; int x = i++;→i变成 6,但x等于 5
关键:表达式的值 ≠ 变量的最终值
必须区分两个概念:
-
变量的值:执行完语句后,
i总是加了 1(无论前置还是后置) -
表达式的值:即
++i或i++这整个运算在代码中“代表什么数”,它决定了它被用在赋值、函数参数、条件判断等位置时实际参与运算的数值
常见误用陷阱
这些地方容易出错,因为表面看不出变量变化,但逻辑已被悄悄改变:
-
printf("%d", i++);打印的是旧值,i在打印后才加 1 -
arr[i++] = value;把value存入arr[i],然后i自增 —— 常用于逐个填充数组 while (i++ 中,循环体最后一次执行时 <code>i已经是 10,退出后i变为 11
性能与习惯建议
在支持重载的语言(如 C++)中,后置自增通常需要构造临时对象保存原值,因此略慢于前置;即使现代编译器常做优化,养成优先使用 ++i 的习惯仍是良好实践,尤其在循环控制中:
- ✅ 推荐:
for (int i = 0; i - ⚠️ 不必要:
for (int i = 0; i (功能相同,但语义上更倾向前置)

















