You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

前缀/后缀自增运算符与+=1的差异及代码输出疑问

问题解答:自增运算符区别与代码差异分析

一、前缀自增、后缀自增的核心区别

  • 前缀自增 ++i:先将变量的值加1,再返回更新后的值。
  • 后缀自增 i++:先返回变量原来的值,再将变量的值加1。

示例代码:

int a = 5;
int b = ++a; // a变为6,b=6
int c = a++; // a变为7,c=6

二、两段代码输出差异的原因

你的疑问核心并非i+=1与i++是否等价,而是运算符优先级导致的指针操作逻辑完全不同:

第一段代码的*p++解析

后缀++的优先级高于解引用*,因此*p++等价于*(p++):

  1. 仅对指针p当前指向的地址做解引用操作(未修改指向的变量);
  2. 随后将指针p本身的地址偏移一个int长度(指向内存中下一个位置);
  3. 全程未改动index的值,所以输出100。

第二段代码的*p+=1解析

+=属于赋值类运算符,优先级低于解引用*,因此*p+=1等价于(*p) += 1:

  1. 先解引用指针p,获取它指向的变量index;
  2. 对index执行加1操作,使其从100变为101,最终输出101。

三、i+=1和i++的等价性

当单独作为语句执行时,i+=1和i++的效果完全等价——都会让i的值加1。但在表达式中使用时,两者存在差异:

  • i+=1执行后返回的是加1后的值;
  • i++返回的是加1前的原值。

示例代码:

int x = 10;
int y = x += 1; // x=11,y=11
int z = x++;    // x=12,z=11

内容的提问来源于stack exchange,提问作者A_normal_guy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 15:52:08