前缀/后缀自增运算符与+=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++):
- 仅对指针
p当前指向的地址做解引用操作(未修改指向的变量); - 随后将指针
p本身的地址偏移一个int长度(指向内存中下一个位置); - 全程未改动
index的值,所以输出100。
第二段代码的*p+=1解析
+=属于赋值类运算符,优先级低于解引用*,因此*p+=1等价于(*p) += 1:
- 先解引用指针
p,获取它指向的变量index; - 对
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
相关产品推荐
相关产品推荐

