C言語とC++言語におけるNULLの定義の違い

C言語において、NULLは

#define NULL 0
又は
#define NULL ((void*)0)

と定義されていた(処理系によりまちまち)。しかし、C++言語においては型チェックが厳しくなった(厳しくした)ため、このような定義だと問題がある。例えば

int* p;
p = NULL;

とすると、コンパイラに怒られる(void* をint* に変換できません、等)。そこで、C++言語では

#define NULL 0

とした上で、0を"何も指していないことを示すポインタリテラル"と定義することにした。(アドレスが0というわけではないので注意)
これで上の問題は解決される。