Pokud si to dobře pamatuju, za NULL pointer se v c považuje pointer, který ukazuje "nikam" (ve smyslu není za ním skovaný žádný datový typ), jako konvence se bere, že takový pointer má hodnotu 0 (nula), tj. ukazuje na adresu 0.
(bacha, neinicializovaný pointer může ukazovat kamkoli, klidně i do existující paměti)
A zřejmě proto, aby byl jazyk c co nejjednodušší, tak jeho návrh (a pak implementace) žádné explicitní klíčové slovo pro takový pointer nedeklaruje, pak se to ojebává těmi "ex post" deklaracemi (viz v kolika hlavičkáčích je ten NULL deklarován (a jak)).
A ani papež nikomu nezabrání, aby si ve svým zdrojáku nenadeklaroval hodnotu NULL třeba na deadbeaf.
c++ (od verze 11) to řeší (systémově) novým klíčovým slovem nullptr.
'\0' je znak s hodnotou 0 (nikoli znak 0), používá se jako ukončovač c stringů.
Smutné je, že tento znak má označení ASCI NUL, nicméně pro tyto stringy se používá označení "null-terminated" string.
Velikost toho znaku '\0' je 1 znak (jeden char (8 bitů)), velikost NULL pointeru (pokud si to nikdo nepředeklaroval) je roven velikosti datového typu ukazatel (na daném železe).
(číselně mají tento znak i NULL pointer stejnou hodnotu)
PS: Že v *nixech končí pokus o dereferenci NULL pointeru segfaultem je dáno jen tím, že (tuším, že záměrně) většinou první (a tedy i s adresou 0) virtuální stránka paměti nemá namapovanou fyzickou paměť, anebo k ní user nemá přístup.