код падает, когда int arr = 1 && arr; но не int arr = 0 && arr; - PullRequest
3 голосов
/ 10 апреля 2010

Я хотел знать, почему следующий код падает.

int main( ) 
{  
    int arr = 1 && arr;
    return 0; 
}

НО не с кодом ниже

int main( ) 
{  
    int arr = 0 && arr;
    return 0; 
}

Заранее спасибо

Ответы [ 2 ]

12 голосов
/ 10 апреля 2010

0 && arr
Выражение выше false из-за 0, поэтому arr не проверяется в отличие от 1 && arr, где arr необходимо проверить, чтобы оценить значение для выражения.


Вы должны попробовать:

int main(){
  int a = 0 && printf("a"); //printf returns number of characters printed, 1
  int b = 1 && printf("b");
  return 0;
} 
4 голосов
/ 10 апреля 2010

Из-за оценки булевых выражений при коротком замыкании. В первом примере левая часть оператора && оценивается как true, поэтому правая часть оценивается. Во втором случае левое значение ложно, поэтому правое значение никогда не оценивается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...