为什么输出显示 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()
语句会产生不同的结果。
#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()
语句会产生不同的结果。