繁体   English   中英

在C程序中如何作为条件初始化?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM