Вопрос: Почему так много путаницы связано с нулевыми указателями? Почему так часто возникают вопросы?

Ответ:
Программисты на С традиционно хотят знать больше, чем это необходимо для программирования, о внутреннем представлении кода.
Тот факт, что внутреннее представление нулевых указателей для большинства машин совпадает с их представлением в исходном тексте, т.е. нулем, способствует появлению неверных обобщений.
  • Использование макроса (NULL) предполагает, что значение может впоследствии измениться, или иметь другое значение для какого-нибудь компьютера.
  • Конструкция "if(p == 0)" может быть истолкована неверно, как преобразование перед сравнением p к целому типу, а не 0 к типу указателя.
  • Наконец, часто не замечают, что термин "null" (ноль, нулевой) употребляется в разных смыслах (перечисленных выше, см. вопрос 1.10
    Автор: Кодт
    Дата: 16.01.03
    ).

    Хороший способ устранить путаницу — вообразить, что язык С имеет ключевое слово (возможно, nil, как в Паскале), которое обозначает нулевой указатель. Компилятор либо пребразует "nil" в нулевой указатель нужного типа, либо сообщает об ошибке, когда этого сделать нельзя. На самом деле, ключевое слово для нулевого указателя в С — это не "nil" а "0". Это ключевое слово работает всегда, за исключением случая, когда компилятор воспринимает в неподходящем контексте "0" без указания типа как целое число, равное нулю, вместо того, чтобы сообщить об ошибке. Программа может не работать, если предполагалось, что "0" без явного указания типа — это нулевой указатель.
  • Автор: Кодт    Оценить