Гарантируется ли, что нулевой указатель всегда будет равен нулю?
Гарантируется. Первый вариант используется в большинстве случаев.
В Mac OS X nullptr != NULL, так чтоvoid *p = nullptr;
if (!p) {
   throw "Не вызовется";
}