在printf函数中出现多个自增、自减时,该如何运算呢?
题目
#include <stdio.h>
int main()
{
int x = 0;
printf("%d,%d,%d\n", x++, ++x, x++);
return 0;
}
题目的打印结果是: 2,3,0, 是不是跟我们的预期结果不一样呢。
运算思路
- printf函数内的表达式的运算是从右至左
printf中的所有前置自增(++x)或自减(–x)都是先参与运算,暂时不输出,所有项计算结束后再输出 - x++ 和 ++x 的规则
x++:后置自增(自减)是先使用后计算
++x:前置自增(自减)是先计算后使用
运算过程
- 先执行最右边的 x++, 也就是先调用再运算,所以该项的输出结果是 0
- 第1步完成后,x的值为 1,接着执行 ++x, 前置自增是先运算,所以此时x的值为2,并且不输出结果
- 最后执行最左边的 x++,输出结果是2,此时x=3
- 最后输出++x项,结果为x的值,即 3
实例
实例1
#include <stdio.h>
int main()
{
int x = 0;
printf("%d,%d,%d\n", ++x, ++x, ++x);
return 0;
}
打印结果为 3,3,3
实例2
#include <stdio.h>
int main()
{
int x = 0;
printf("%d,%d,%d\n", x++, x++, x++);
return 0;
}
打印结果为 2,1,0
实例3
#include <stdio.h>
int main()
{
int x = 0;
printf("%d,%d,%d,%d,%d\n", --x, x, x--, x++,++x);
return 0;
}
打印结果为 0,0,2,1,0