{
int i=0;
int j;
j=(i=0)?2:3;
printf("the answer is %d",j);
}
我想知道为什么当变量 i
的值为零时,语句 j=(i=0)?2:3;
的结果是 3
?
{
int i=0;
int j;
j=(i=0)?2:3;
printf("the answer is %d",j);
}
我想知道为什么当变量 i
的值为零时,语句 j=(i=0)?2:3;
的结果是 3
?
j=(i=0)?2:3;
是相同的
if(i = 0)
j = 2;
else
j = 3;
i = 0
将0赋值给i
,由于0被认为是false,因此else语句执行,将3赋值给j
。
=
是赋值运算符,将左右操作数赋值。这与条件运算符==
不同,后者比较其操作数并返回0(假)或1(真)。
==
,那么 j=(i==0)?2:3;
和下面这行代码是等价的。if(i == 0)
j = 2;
else
j = 3;
j
。
。
j=(i=0)?2:3;
可以写成
j=(0=i)?2:3;
由于0是一个常量值,无法更改,编译器会发出错误提示,以防止这种错误。请注意,0 == i
和i == 0
都可以实现同样的功能,并且两者都是有效的。
i=0
是赋值语句,用i==0
进行比较。
赋值语句返回被赋的变量的新值,在这里是0
。作为条件判断,结果为false。
{
int i=0;
int j;
j=(i=0)?2:3;
printf("the answer is %d",j);
}
int i=0;
int j;
j=(i==0)?2:3;
printf("the answer is %d",j);
}
==
运算符。 您将 i
设置为值 0
并再次测试此值,因此结果是 false,即使它在代码中看起来是 true。j = (i == 0) ? 2 : 3;
赋值运算符(在 i=0
中的 =
)的结果是对象的新值(0
)。0
是假值,因此您的条件选择了“false”分支,即 3
。
i==0
而不是i=0
。 - barak manosi==0
会被评估为true,而i=0
会被评估为false。 - juanchopanzai
为零时,为什么此语句会给出答案3
”。我想到的是隐含的问题是为什么这个语句没有给出2
,所以通过指出这一点,我只是试图回答那个(隐含的)问题。 - barak manos