太阳系新生
2019-07-12 14:16
a=100
printf(a++)不是该101吗?
a++和a--相当于a=a+1和a=a-1;所以不同于倒数第二个a+1,他多了一个赋值操作,所以a的值保留下来了,但是单纯的a+1只能在那一行输出的时候+1,并不能保留这个值
感谢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--"的运算结果中取值,不需要任何运算。)
以上解释是我个人自学反思的一些理解,如果答案对您有所帮助,希望您能点个赞,如果答案有错漏的地方,希望各位不啬言辞,为我纠正错误,共同进步,谢谢各位。
这句话很很重要“它们经常使用在循环中。”从上到下只有一个a,这个a是被循环用的。
解释上面结果:a++=100(输出值是100,其实已经递增1了);
下面++a=102(因为前面递增了1加上这次增的1所以就是102);下面的a就是以102为基础,以此类推......
所以a++后,先输出100后,a的值变为101,++a后输出102;如果102基础上--a是输出101,再进行a--运算输出还是101,但a的值已经变成了100。
a++是先执行该条语句(输出或是计算),然后再自减;++a则是相反,先自减,然后执行语句;
a--和--a也一样。
--a应该是98 a--应该是100
a++可以这么理解 a在前面他已经取了值后面的+号对他没有影响 ++a,+加号在前所以要+1+1+a =102
a++是先取值后运算的 ++a是先运算后取值 也就是说a是100是被 打印了一次 经过两次加一后才被 打印 所以就是加了2 所以被打印成 102
C语言入门
926210 学习 · 20797 问题
相似问题