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