为什么输出显示 3 1 3 任何人都可以在 C 中帮助我吗

Why the output is showing 3 1 3 can anyone help me in this in C

#include<stdio.h> 

int main() 
{ 

    int i = 1; 
    
    printf("%d %d %d",++i,i++,i); 
    return 0; 
} 

您的程序表现出规范所称的“未定义行为”。这不是有效的 C 程序,因为不允许在一条语句中两次修改单个变量。编译器可以根据需要进行处理。使用不同的编译器会得到不同的结果。有些编译器可能会生成“3 1 3”,有些可能会生成“3 1 1”,有些可能会生成完全随机的数字。

了解这一点很重要。即使您可以看到如何产生特定结果,规范也允许编译器做任何事情。

(不是答案,而是进一步讨论)

这真是一个有趣的问题(至少对我来说,因为我也是一个C newby)。

我尝试了以下 snippet

//gcc 7.4.0
#include<stdio.h>
int main() {
int i = 1; 
printf("%d %d %d\n",pr(++i),pr(i++),pr(i)); // 3 1 1
i=1;
printf("%d %d %d",++i,i++,i); // 3 1 3
return 0; 
}
int pr(int v){
  printf ("arg: %d\n",v);
  return v;
}

并显示(大写)

arg: 1
arg: 1
arg: 3

我仍然不明白为什么我的两个 printf() 语句会产生不同的结果。