首页 > printf函数输出

printf函数输出

#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,然后才计算其他部分导致的

【热门文章】
【热门文章】