[英]How initialization is work as Condition in C program?
#include <stdio.h >
void main (){
int a = 0, b = 1, c = 2;
*(( a+1 == 1) ? & b : &a ) = a ? b : c;
printf ("%d , %d, %d\n ", a, b , c );
}
说明:
*(& b ) = a ? b : c ;
b = a ? b : c ;
b = 0 ? 1 : 2 ; //problem is here
b = 2
我在解释的最后第二行中怀疑b = 0条件如何出错并给出b = 2。 为什么不b = 1? 抱歉,我错过了任何事情。
b = 0? 1:2; //问题在这里
在第二行的最后一行中,我怀疑b = 0条件如何出错并给出b = 2。 为什么不b = 1?
因为=
是赋值运算符(不是逻辑运算符==
),并且它的优先级比条件运算符低?
。 因此,实际上表达式与:
b = ( 0 ? 1 : 2 );
现在它是典型的条件运算符,并且因为0为false,所以b
分配给2
。
三元运算符的优先级高于赋值运算符。 因为那个,
b = 0 ? 1 : 2 ;
被解释为:
b = (0 ? 1 : 2) ;
不作为:
(b = 0) ? 1 : 2 ;
有关C中运算符优先级的更多详细信息,请参见http://en.cppreference.com/w/c/language/operator_precedence 。
b = 0 ? 1 : 2
由于运算符的优先顺序,上一行等效于:
b = (0 ? 1 : 2)
也就是说, ?:
运算符的优先级高于=
运算符。 所以最后,以上内容可以重写为:
if (0) {
b = 1;
} else {
b = 2;
}
因此, b = 2
是最终结果。
在第二行的最后一行中,我怀疑b = 0条件如何出错并给出b = 2。 为什么不b = 1?
b = 0 ? 1 : 2 ; //problem is here
在这种情况下, b=0
不是条件。 由于三元运算符的优先级高于赋值运算符=
,因此,应首先对其进行评估。
因此,这里0?1:2
条件是0
,即false,因此b
等于2
。
我想你的意思是:
b = !b ? 1 : 2;
,则当b为零时,b变为1;而当b为非零时,b变为2。
要么:
(b==b) ? 1 : 2;
,当b为零时计算结果为1,而当b为非零时计算结果为2。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.