#include <stdio.h>
int main(int argc, char const *argv[])
{
int p=1;
printf("%d %d %d\n", p,p,++p);
p=1;
printf("%d %d %d\n", p,++p,p);
p=1;
printf("%d %d %d\n", ++p,p,p);
return 0;
}
输出结果:
2 2 2
2 2 2
2 2 2
请问为什么输出结果都是一样的呢,难道和++p的位置无关?
不同的编译器都不一样,这是一种未定义的行为,然后不同的编译器优化不一样,也就这样了
对于一个参数表中的表达式,计算顺序是未定义的。
比如对于函数f,其参数表传入三个表达式,即调用f(A,B,C)
,未定义行为意味着你永远不知道是先算A还是先算B还是先算C,而且不同系统不同编译器不同编译选项会有不同的结果,像你所述的编译结果就是先算了++p,然后才计算其他部分导致的