Вопрос: Расскажите все-таки о пресловутых нулевых указателях.

Ответ:

Для каждого типа указателей существует (согласно определению языка) особое значение — "нулевой указатель", которое отлично от всех других значений и не указывает на какой-либо объект или функцию. Таким образом, ни оператор &, ни успешный вызов malloc() никогда не приведут к появлению нулевого указателя. (malloc возвращает нулевой указатель, когда память выделить не удается, и это типичный пример использования нулевых указателей как особых величин, имеющих несколько иной смысл "память не выделена" или "теперь ни на что не указываю").

Нулевой указатель принципиально отличается от неинициализированного указателя. Известно, что нулевой указатель не ссылается ни на какой объект; неинициализированный указатель может ссылаться на что угодно.
См. также вопросы 3.1, 3.13, и 17.1.

В приведенном выше определении уже упоминалось, что существует нулевой указатель для каждого типа указателя, и внутренние значения нулевых указателей разных типов могут отличаться. Хотя программистам не обязательно знать внутренние значения, компилятору всегда необходима информация о типе указателя, чтобы различить нулевые указатели, когда это нужно (см. ниже).

Смотри: K&R I Разд. 5.4 c. 97-8; K&R II Разд. 5.4 c. 102; H&S
Разд. 5.3 c. 91; ANSI Разд. 3.2.2.3 c. 38.
Автор: Кодт    Оценить