C は void* から別のポインタへの暗黙のキャストがあるから NULL は (void*)0 の定義も許されてる。
C++ はそれができないから NULL は 0 と定義するしか無いという仕様に変更された。