2016-01-07 3 views
-1
main() 
{ 
int a,b=0,c=1,d=1; 
a=++b&&++c||++d;  
printf("%d %d %d",b,c,d); //1 2 1 
b=0,c=1,d=1; 
a=b&&++c||++d; 
printf("%d %d %d",b,c,d); //0 1 2 
} 

Почему второй printf дает ответ 0 1 2 вместо 0 2 1?Оператор коротких замыканий Порядок оценки

+3

Это не имеет никакого отношения к «приоритету присвоения» и относится к оценке коротких замыканий. – juanchopanza

+0

Изменение названия не изменит ответ ... ваш ответ *** - это ответ, тот факт, что вы не отметили его как принятое, предполагает, что вы не знаете, что означает оценка короткого замыкания, хоть –

ответ

5

Почему второй printf дает ответ 0 1 2 вместо 0 2 1?

&& является short-circuiting.

В

a=b&&++c||++d; 

++c не будет оцениваться, если b является 0 что дело здесь. Следовательно, c является 1 вместо 2.

Смежные вопросы