鱼C论坛

 找回密码
 立即注册
查看: 1578|回复: 9

[已解决]老问题,++b和b++问题

[复制链接]
头像被屏蔽
发表于 2019-8-7 20:03:06 | 显示全部楼层 |阅读模式
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-8-7 20:36:23 | 显示全部楼层    本楼为最佳答案   
假设b的初值是1
自右向左进行运算 先算最右边的b++,先提取b的值1,然后b=b+1=2,此时b已经变为2;
然后算另一个b++,先提取b的值2,结果就是1+2+1=4
最终b的值为3
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-7 20:37:58 | 显示全部楼层
无需纠结,知道原理就行,工作中程序写成这样,不是同事会把你杀了就是项目经理会开了你!
不要抖机灵,程序不是越复杂越好,是自浅显易懂最好!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-7 21:03:54 | 显示全部楼层
根据运算符的有闲心和结合性,先计算括号内的,并且从左至右。即
设 b1  =  b; b2 = b++; b3 = b++;
若 a = 1 + (b++) + (b++);
则 a = 1 + b1 + b2; b = b3;
举个简单的例子:
b = 1;
a = 1 + (b++) + (b++);
也就是 a = 1 + 1 + 2; b++;
结果 a = 4 , b = 3;

计算完 第一个括号内的 b 再自加,再计算二个括号内的  b , 求出 a , b再自加;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2019-8-7 21:13:15 | 显示全部楼层
为啥我算的是  a=3    b=3
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-7 21:16:59 | 显示全部楼层
表达式运算时  b的值一直为1  ; 语句结束后  b才开始自增   不论有多少  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-7 21:48:11 | 显示全部楼层
假设 a = 0 , b = 0;

a = 1 + (b++) + (b++)
它都是加减 运算符顺序一致 从左到右扫

先算 1 + b  然后 b++ 然后再+b 然后付给 a  然后 b++
结果 a = 2 ,b = 2

我记得小甲鱼也遇到跟这道差不多的题  
好像是 两个还是三个++p
但是他有提到有些编译器为了优化 把两个++p先算  也就是说 两个p 都等于p + 2 达到你不想达到的结果  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

头像被屏蔽
 楼主| 发表于 2019-8-8 00:00:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

头像被屏蔽
 楼主| 发表于 2019-8-8 00:17:30 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-8 17:37:54 | 显示全部楼层
freejzh 发表于 2019-8-8 00:17
看了几个人的解答,感觉这个表达式的计算过程,大家好像不太统一,这说明对这个问题的理解总有人是错误的啊 ...

还有一个就是 你这个表达式在不同的编译环境下 结果可能不同 有的编译器编译没问题 结果就是 a=4,b=3;有的编译器则会报错,编译不通过,错误原因是multiple unsequenced modifications to 'b' (对变量b进行多次无序更改)
因为不同的编译器,对程序语句执行的过程是不一样的
所以还是那句话 懂自增自减运算符的规则就好,无序太过于纠结,很多时候当下没能理解的东西跳过去未免不是一件好事,因为当你更深入的学习后面的知识的时候,再返回头看之前没懂的东西,会有一种恍然大悟的感觉!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-4 03:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表