¿Por qué los punteros no se inicializan con NULL de forma predeterminada?

¿Puede alguien explicar por qué los punteros no están inicializados?NULL?
Ejemplo:

  void test(){
     char *buf;
     if (!buf)
        // whatever
  }

El programa no entraría en el si porquebuf No es nulo.

Me gustaría saber por qué, ¿en qué caso necesitamos una variable con la papelera activada, especialmente los punteros que tratan la basura en la memoria?