NULLポインターが
内部では『0』じゃない場合がある
って聞いたんだけど

それならこういうのは危険なのかな?

void* p[10];
memset(p,0,sizeof p);

とか

void** p = calloc(10,sizeof p);

この場合『0』で初期化しているので
内部ではNULLポインターではない、
と解釈されそう