Может кто-нибудь объяснить, почему указатели не инициализируются на NULL? 
Пример:
  void test(){
     char *buf;
     if (!buf)
        // whatever
  }
Программа не будет входить внутри if, потому что buf не является нулевым.
Я хотел бы знать, почему, в каком случае нам нужна переменная с мусором, особенно указатели, адресующие мусор в памяти?