Почему инкремент не может быть работой в логике?
почему переменная k не может быть увеличена в данной программе?
Что я уже пробовал:
#включить <stdio.h>
пустота главная()
{
int k = 8;
int x = 0 == 1 && k++;
printf("%d %d\n", x, k);
}
Выход:0 8
Это происходит из-за явления, называемого короткое замыкание Это означает, что правая рука &&
оператор не будет оцениваться, если результат уже определен с левой стороны. 0 == 1
является 0
/false
Итак, не имеет значения, что правая рука (k++
) возвращает окончательный результат всегда 0 или false (ложь &&усилителя; правда-ложь, как ложь и усилитель; & ложь). Это означает, что правая рука k++
никогда не получает оценки, так что k
не увеличивается в размерах.