下列代码为什么会这样输出,请大佬指点。
#include
int main()
{
int x=5;
printf("%d\t%d\t%d\t%d",x++,++x,x--,--x);
}
程序输出为4 5 4 5
希望能告知其计算规则和输出规则。
对于函数参数的求值顺序,在c语言里是未定义行为,这意味着编译器可以任意实现,而不必统一。所以不要在参数上使用副作用表达式。
#include <stdio.h>
int main()
{
int x;
x = 5;
printf("\n%d\t%d\t%d\n",++x,++x,++x);
x = 5;
printf("\n%d\t%d\t%d\n",x++,x++,x++);
x = 5;
printf("\n%d\t%d\t%d\n",--x,--x,--x);
x = 5;
printf("\n%d\t%d\t%d\n",x--,x--,x--);
x = 5;
printf("\n\n%d\t%d",++x,x++);
x = 5;
printf("\n%d\t%d",x++,++x);
x = 5;
printf("\n\n%d\t%d",--x,x--);
x = 5;
printf("\n%d\t%d",x--,--x);
}
对于++x、--x、++x和--x,其计算过程是从右往左计算
即printf("%d\t%d\t%d\t%d",x++,++x,x--,--x);的计算顺序为:--x x-- ++x x++
对于++x和--x,其输出值是最终运算结果。
即5-1-1+1+1=5
对于x++和x--,其输出值是其右侧计算结果。
即第2个4是计算--x后的结果,第1个4是计算--x x-- ++x后的结果。