我遇到了两个 C 能力问题。
main()
{
int x=4,y,z;
y=--x;
z=x--;
printf("\n%d %d %d",x,y,z);
}
输出:2 3 3
(从左到右打印)
main()
{
int k=35;
printf("\n%d %d %d",k==35,k=50,k>40);
}
输出:0 50 0
(从右到左打印)
为什么会这样?我在 Stack Overflow 上看到了很多类似的答案。人们回答这是未定义的行为,但如果在面试中提出这个问题,应该如何回答?
最佳答案
C 中任何函数的参数求值顺序没有任何特定顺序。看起来您被问到的平台/编译器可能正在从右到左评估函数参数,这将打印出您获得的结果,但是 C 标准说您不知道顺序,所以这里显示的是什么是未定义的行为,几乎肯定会在不同的编译器或平台上获得不同的结果。
请注意,在您的函数中,所有变量值都在调用 printf()
之前赋值 - 而在您的 main()
中,值被赋值给变量在 printf()
的参数列表中。
关于c - 如何理解 C 中 printf 语句的行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50532818/