题目来源一位考研同学的题目。
第一眼:小子,这都不会😀
第二眼:wok,咋没有选项😢
作为一个大一学C语音,大二学Java的同学来说,我一看就觉得肯定是11 6 11 6 。
结果很遗憾,没有这个选项。
我觉得不应该呀,于是我写了一段java代码跑了一次。
Java代码
还好,我天天睡觉没有睡到连JAVA都不会的地步,但是我毕竟也是大一学过C语音的,我明明记得i++是后自增。
那到底是怎么回事,还是实现一下好了,由于之前一直学的C++而且我记得两个应该差不多,就输出几个数字而且,能有多大区别。
C++语言代码
我了个去,咋还是这样子,算了,还是老老实实写C吧。
C语音代码
这次就不一样了,后来我才知道,printf里面还有顺序的说法,大致就是从左往右来执行。具体为啥,请恕我才疏学浅,如果有大佬知道的话可以在评论区给我解答一下吗,感激不尽。
#include <stdio.h> int main() { int i = 11, j = 6; printf("%d %d %d %d", i, j, i++, j++); // 1、 先运行了j++,此时由于是右自增,于是先显示了j的值,也就是6,然后j再自增了,此时j=7 // 2、 第二个运行了i++,此时由于是右自增,于是先显示了i的值,也就是11,然后i再自增了,j=12 // 3、 然后输出了j的值,也就是1第一步的7 // 4、 最后输出了i的值,也就是12 return 0; }
以上是我看了一些网上的资料给出的推测,所有我打算验证一下,看看是不是所谓的从右到左执行。
#include <stdio.h> int main() { int i = 11, j = 6; printf("%d %d %d %d %d %d", i, j, i++, j++, ++i, ++j ); return 0; }
如果刚刚的推断是正确的,那么结果应该是:13 8 12 7 12 7。
那么还是老样子,看看运行结果
沃趣,咋回事,咋又不对,我看看AI咋说。
到现在人更懵了,于是我试试更换GCC版本看看是否如同上面所说
好吧,综上所述,当编译器为Clang时,出现了不一样的结果,这个结果比较好接受一些,从左往右算了一遍。
后面又搜了一下,计算是从右往左,输出是从左往右。
总是觉得只能看出个大概,不能明白到底是怎么回事。
比如这个
i
:最终值为 9(所有操作后的值)。i++
:在i
增加到 9 之前为 8。++i
:在i
从 8 增加到 9 之后。i++
:在前面的操作之后为 6(操作后的值)。++i
:最终值为 9(最后一次增加后的值)。
但是我总感觉这个解释并不好,不知道有没有大佬可以给我讲解一下呀!!!