Cでは、
#define NULL (void*)0
だったから、Cの文脈では明らかにポインタだった。
C++では
#define NULL 0
となったが、
char *p = (void*)0;
がエラーになるから (void*)0 を 0 にしただけで、
気持ちの上ではCのNULLとなんら変わるところはない。

CのNULLがポインタである以上C++のNULLもポインタである。