不应该是776吗?
如果最后的a++改成a--呢?
printf函数压栈的顺序是从右往左,输出顺序是从左到右。
图中代码的执行顺序是:
(1)a的初始值是5,a入栈(此时a=5);
(2)先执行最右侧的++a:a出栈,执行a++,a变成6,a入栈(此时a=6)
(3)执行中间的++a:a出栈,执行a++,a变成7,a入栈(此时a=7)
(4)执行左侧的a++,因为a++是后置++,先执行printf输出后再++,所以,a先出栈,执行printf,输出7 ,然后a++,a变成8,a入栈(此时a=8)。
然后再执行printf输出后面的两个a,此时栈中a的值是8,所以后面输出的是两个8
所以,最后的输出结果是 7 8 8
需要注意的是a++和++a的执行顺序是不一样的!!
因此,最终的输出结果是 7 8 8。
1.printf里的参数从右往左执行
2.a++返回的是表达式的值,而++a返回的是变量a自身
所以在打印a++的时候,计算a++的时候a是什么值就打印什么值
而打印++a的时候就是在打印a,打印的是a的最终值