c语言 自增自减的问题;

img

img


为什么输出的值是788

不应该是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的执行顺序是不一样的!!

  1. 执行 printf 函数,输出 a++ 的值,即 5,此时 a 的值变为 6。
  2. 执行 ++a 的操作,将 a 的值加 1,此时 a 的值为 7。
  3. 执行 ++a 的操作,将 a 的值再次加 1,此时 a 的值为 8。
  4. 执行 printf 函数,输出 ++a 的值,即 8。

因此,最终的输出结果是 7 8 8。

1.printf里的参数从右往左执行
2.a++返回的是表达式的值,而++a返回的是变量a自身
所以在打印a++的时候,计算a++的时候a是什么值就打印什么值
而打印++a的时候就是在打印a,打印的是a的最终值

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632