В соответствии с исходным стандартом C NULL может быть любым значением - не обязательно равно нулю .
В определении языка указывается, что для каждого типа указателя существует специальныйvalue - «нулевой указатель» - который отличается от всех других значений указателя и который «гарантированно сравнивает неравное с указателем на любой объект или функцию».То есть нулевой указатель нигде не указывает;это не адрес какого-либо объекта или функции
Для каждого типа указателя имеется нулевой указатель, и внутренние значения нулевых указателей для разных типов могут различаться.
(с http://c -faq.com / нуль / null1.html )