C语言:printf的执行顺序
标签:C语言 printf 执行顺序
by 小威威
先上一下代码:
# include <stdio.h>
int main(void) {
int a = 21, b = 11;
printf("%d\n", --a+b, --b+a);
return 0;
}
输出结果是30而不是31.
首先,我们能够肯定的是输出的是第一个参数,但是为什么不是31呢?难道受到后面参数的影响?
其实问题出在我们对printf的执行顺序不了解。printf是从右往左运行的,即是printf 先执行–b+a,再执行–a+b,然后再输出第一个参数。为什么会这样呢,那么就得查看一下pringf函数的源代码。
我个人觉得,可以这样理解:
我们将–a+b,–b+a两个参数传入printf函数,但是函数内部先执行第二个参数的计算,即是对–b+a的计算,然后再对第一个参数计算,然后再输出第一个参数。所以就会出现上面的情况!!!
以上内容皆为本人观点,欢迎大家提出批评和指导,我们一起探讨!