printf参数从后往前求值
时间: 2023-12-23 19:27:47 浏览: 153
C语言函数参数的求值顺序及可变参数函数的设计方法.pdf
根据引用[2]的结论,printf()函数中的表达式参数的计算顺序是从右往左的。当所有表达式计算完后,将最后的值赋给printf()函数所有引用当前变量的位置,除了进行了后置自增/自减操作的位置。
以下是一个示例代码,演示了printf参数从后往前求值的情况:
```c
#include <stdio.h>
void fun(int i, int j, int k){
printf("%d %d %d\n", i, j, k);
}
int main(){
int a = 10;
fun(a++, ++a, --a); // 输出:10 11 11
a = 10;
fun(++a, a--, a++); // 输出:11 11 10
return 0;
}
```
在上述代码中,我们定义了一个函数fun(),该函数接受三个整型参数,并使用printf()函数打印这三个参数的值。在主函数main()中,我们分别调用了fun()函数两次,传入不同的参数。根据引用和引用的代码和结论,我们可以得出以下结果:
第一次调用fun()函数时,参数为(a++, ++a, --a),其中a的初始值为10。根据printf()函数参数从后往前求值的规则,先计算--a,此时a的值变为9,然后计算++a,此时a的值变为10,最后计算a++,此时a的值变为11。因此,打印的结果为10 11 11。
第二次调用fun()函数时,参数为(++a, a--, a++),其中a的初始值为10。根据printf()函数参数从后往前求值的规则,先计算a++,此时a的值变为11,然后计算a--,此时a的值变为10,最后计算++a,此时a的值变为11。因此,打印的结果为11 11 10。
阅读全文