Странный результат произошел в следующем коде (почему входной результат 'b')

0
int main(void)
    {
       int array[] = {1,2,3,4,5,6,7};
       int i = -1;
       if(i <= (sizeof(array)/sizeof(array[0])) -2)
           printf("a\n");
       else
           printf("b\n");
       return(0);    
    }

Я не знаю, почему выражение IF является ложным.

  • 0
    Почему вы думаете об обратном?
  • 0
    объяснено здесь: stackoverflow.com/questions/50605/…
Теги:

1 ответ

0
Лучший ответ

Вы пытаетесь сравнить знаковое целое int и целое число без знака size_t. Следуя C целым правилам продвижения, i получает повышение до беззнакового целого числа и, следовательно, обертывается на очень большое число. Когда вы сравниваете это с небольшим значением с правой стороны, результат будет ложным.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню