(void*)0
является нулевым указателем, а.к.а. NULL
(который на самом деле представляет собой макрос, определенный в нескольких заголовочных файлах, например stddef.h
или stdio.h
, что в основном сводится к тому же, как (void*)0
).
Update:
Как объяснить нулевые указатели и их полезность? В принципе, это особое значение, которое говорит: «Этот указатель нигде не указывает» или «Этот указатель не установлен в действительную ссылку на объект».
Историческая справка: Хоар, который, как говорят, изобрел неопределенные ссылки в 1965 году, как известно, сожалеем, что изобретение и, таким образом, называет его "Billion Dollar Mistake":
Всякий раз, когда вы работаете с указателями, вы должны убедиться, что никогда разыменовать нулевой указатель (потому что он не ссылается ни на что по определению). Если вы все равно это сделаете, вы либо получите ненормальное завершение программы, либо общую ошибку защиты, либо неожиданное поведение программы, по крайней мере.
Это так же, как 'return NULL;' - почему это проблема? Может быть, вам стоит больше написать код? –
Я никогда не видел этого раньше - это действительно так распространено? –
Конечно - почему бы и нет? Может быть, в функции есть одно или несколько операторов возврата, которые возвращают указатель не-NULL? Мы не будем знать, если вы не разместите больше кода ... –