2017-01-31 2 views
2

Я не понимаю, почему раньше if-statement ++ b [1] равен 1, но после if-statment ++ b [1] равен 0. Почему ++ b [1 ] не увеличивается внутри if-statement?Ускоренный приращение массива в C

#include <stdio.h> 

int main() 
{ 
    int c = 0; 
    int b[3] = {4}; 
    printf("%d\n", ++b[1]); // return 1 
    b[1]--; 
    if((c-- && ++b[1])|| b[0]++) 
    { 
     printf("%d\n", b[1]); // return 0 
     printf("%d\n", c); // return -1 
    } 
    return 0; 
} 
+5

Почему? Зачем кому-то писать такой код? –

+0

Как и в жизни, лучше всего делать одно за раз –

+0

Это часть моей работы по отслеживанию памяти из моего университета –

ответ

2

Здесь просто запутывается использование оператора.

  • c-- является постфикса декремент, и поэтому в условном операторе c оценивается как ложное (как это 0), перед тем, как уменьшается.
  • Теперь, начиная с &&, замыкает замыкание и оценивает только второе условие, если первое верно, мы не оцениваем ++b[1], но входим в условное обозначение b[0]++.
Смежные вопросы