Zumindest ab C99 gibt es in C ein Konstrukt, in dem man einen Pointer definieren kann der nicht NULL sein kann/darf.
Das erreicht man mit einer Änderung in der Deklaration der Funktionsargumente.
Eine Funktion
void f(int *p);
z. B. erlaubt dass der Aufrufer auch einen NULL-Pointer als <p> übergeben könnte.
Will man das verhindern, deklariert man die Funktion statt dessen wie folgt:
void f(int p[static 1]);
Dies teilt dem Compiler mit, dass als Argument nur ein Pointer erlaubt ist, der auf (zumindest) ein real existierendes Array-Element verweist.
Ein Aufruf wie
f(0);
würde vom C-Compiler daher bereits zur Übersetzungszeit als Fehler zurück gewiesen werden... oder zumindest soweit der C-Compiler etwas taugt und diese Möglichkeit zur Fehlerprüfung auch nutzt (was leider nicht alle tatsächlich tun).
Da ich mich nach C++98 aus der C++ Entwicklung zurĂĽck gezogen habe weiĂź ich nicht ob neuere C++ Versionen dieses C99 Feature ĂĽbernommen haben oder nicht.
Was Rust angeht, kann dieses noch ganz andere Speicherfehler vermeiden als nur null-Pointer, und wo C99 nichts bietet.
Aber in diesem Fall geht es ja um einen null-Pointer, also ist der Vergleich sinnvoll.