gpt4 book ai didi

c - 意外输出 printf 语句

转载 作者:行者123 更新时间:2023-12-02 09:32:50 25 4
gpt4 key购买 nike

为什么输出 ij在下面两个printf()不同吗?

#include <cstdio>
#define MAX(x,y) (x)>(y)?(x):(y)
int main()
{
int i=10,j=5,k=0;
k==MAX(i++,++j);
printf("%d %d %d\n",i,j,k);
i=10,j=5,k=0;
k=MAX(i++,++j);
printf("%d %d %d\n",i,j,k);
return 0;
}

我认为只有k应该有所不同,但它显示了所有不同的输出,i , jk ,在 printf()陈述。原因是什么?

输出:

11 7 0
12 6 11

最佳答案

k==MAX(i++,++j); 翻译为:

  k==(i++) > (++j) ? (i++) : (++j);
/* 2 1 3 : Precedance */

在您的情况下,i = 10j = 5,因此比较结果为 10 v/s 6 为 true,或 1 具有副作用i 变为 11j > 变为 6。 (回想一下:宏不是函数)

k = 0 且不等于 1 时,k==(i++) > (++j) 将是 false++j 将被执行。导致 j 增加到 7

在后一种情况下,变量的值不会被修改。

什么时候可以在两种情况下获得相同的输出?即使您使用函数更改宏,您的参数也会产生副作用,这会导致输出 11 6i j,因此您正在使用 更改变量>++ 运算符,不要期望两个语句具有相同的值。

关于c - 意外输出 printf 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30861416/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com