【发布时间】:2021-06-10 05:27:25
【问题描述】:
如果我在下面代码的三元运算符的第一个表达式中给出一个等于关系运算符,那么它输出10,20,我明白了。
#include <stdio.h>
int main()
{
int a=10, c, b;
c = (a==99) ? b = 11:20;
printf("%d, %d", a, c);
return 0;
}
但是,当我放置 赋值 运算符而不是 等于 关系运算符(代码如下)时,它会输出 99, 11。现在我不明白这个 Assignment 运算符在三元运算符的第一个表达式中是如何处理的。
#include <stdio.h>
int main()
{
int a=10, c, b;
c = (a=99) ? b = 11:20;
printf("%d, %d", a, c);
return 0;
}
【问题讨论】:
-
赋值运算符将 a 设置为 99,因为 99 是一个非零值,所以它是真的。所以 c 设置为 11。
-
b = 11部分,b设置为11,b的值为“返回”,所以条件为真时c也设置为11。 -
这能回答你的问题吗? What does an assignment return?
-
@PaulHankin 是的,我得到了答案。我会接受答案。
-
值得注意的是,将
=与其他运算符混合被认为是非常糟糕的做法,除非它用于存储最终结果。在同一个表达式中有多个赋值是一些主要的代码臭味。=和?:都是危险的运算符,带有许多微妙的特殊规则。由于单行中的大多数运营商没有奖励,因此应将此类行分成几行。
标签: c conditional-operator assignment-operator