我编写了这个 C 程序。
#include<stdio.h>
int main()
{
int k=35;
printf("\n%d %d %d",k==35,k=50,k>40);
return 0;
}
并得到这个输出。
0 50 0
现在,我正在思考 printf 函数是如何工作的以及为什么输出是 0 50 0。
最佳答案
您通过修改 k
并在序列点之前的同一语句中使用其值来调用未定义的行为。
虽然任何输出都是合法有效的,但可以理解为什么在这种情况下会发生0 50 0
:
当调用 C 函数时,其参数可以按任何顺序求值,但它们通常以相反的顺序求值(右-最先,最左边最后)。
这不能得到保证,但通常是正确的。
因此这 4 个参数的计算结果为:
1.) k>40
(假/0
,因为 k
是 35)
2.) k=50
(将 50 赋给 k
,并计算为 50)
3.) k==35
(false/0
,因为 k 是 50,而不是 35)
4.) "\n%d %d %d"
(字符串文字)
然后 printf
打印其参数:0, 50, 0
关于c - C 语言中的 printf 函数是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58479145/