为什么a原值是100,a++还是100,++a就成了102了,--a和a--都是101,到底是为啥
a=100
printf(a++)不是该101吗?
a=100
printf(a++)不是该101吗?
2019-07-12
感谢weixin_慕后端1512621的提问,让我重新审视了自己上一个答案,发现第6、7条思路不够严谨,重新梳理了一下,作出修改如下:
6.a+1=100+1=101(由运算,得结果,运算前数值为上一公式的运算结果,为100,由运算100+1=101,而得出这个结果为101;
【注意】这里“为什么式"a+1"最后不取值?”
我的猜想是这样的,程序默认"a++""a--""++a""--a""a"的运算自成一格体系,相当于一个主线任务,在"a+1"这一步中,"a"取上一运算值,此步骤的主线任务已经完成,后面的"+1"相当于支线任务,支线任务虽然会被执行,乃至得出结果,但其结果仅代表支线任务的完结,并不会影响主线任务,后面的主线任务仍然独立运行。(我是根据此步骤结尾处“//注意,这里并不改变a的值”这一提示推断出来的)。
7.a=100(【注意】由上,因为公式"a+1""+1"部分相当于“支线任务”,其结果101并不影响“主线任务”,所以这里取值应该取"a+1"运算中的“主线任务部分”,即取"a"的值,其结果为100。)
PS:我上一个回答,在运算7.中说跳过运算6.取值,仔细想想不够严谨,应该是运算7.中"a"的值,取了运算6."a+1"中的"a"值,即“主线部分”的运算结果,这种思路“主线任务”仍然独立且延续运行,这样才更符合程序运行的思路才对,毕竟程序不会像我们一样闹情绪,随便的中断、跳过某些步骤。我想这样的逻辑才更加严谨,欢迎大家共同探讨,谢谢各位。
以上理论仅为个人推论,并不专业,仅供大家参考,还请以专业人士说明为上!
以下分析内容为我个人的思考和推导,并不专业,仅供参考,如有错误,还望不吝指教:
在该例子中a的数值是根据运算不断递进推演的,即上一运算的结果为下一运算a的数值。我个人的反思具体详解如下所示:
a=100(目前“取值”为a=100)
"a++"="a+1"="100+1"=101(先取值,再运算,这里的取值为上一个运算结果,即100,再运算100+1=101,运算结果为101)
"++a"="a+1"="101+1"=102(先运算,再取值,运算前数值为上一公式的运算结果,为101;先运算101+1=102,再取值为102)
"--a"="a-1"="102-1"=101(先运算,再取值,运算前数值为上一公式的运算结果,为102;先运算102-1=101,再取值为101)
"a--"="a-1"="101-1"=100(先取值,再运算,这里的取值为上一个运算结果,即101,再运算101-1=100,运算结果为100)
a+1=100+1=101(由运算,得结果,运算前数值为上一公式的运算结果,为100,由运算100+1=101,而得出这个结果为101;【注意】这里的运算结果不影响下一运算a的值,即不被后面运算取值,如若后面运算需要取值,则应该跳过此条运算,取值上一运算最后的结果,即取值为100)
a=100(【注意】因为公式"a+1"最后不取值,所以这里取值需要跳过公式"a+1",从公式"a--"的运算结果中取值,不需要任何运算。)
以上解释是我个人自学反思的一些理解,如果答案对您有所帮助,希望您能点个赞,如果答案有错漏的地方,希望各位不啬言辞,为我纠正错误,共同进步,谢谢各位。
举报