An uninitialized pointer has an indeterminate value. It’s almost impossible to test subsequently whether such a pointer is valid, especially if it is passed as an argument to a function, which in turn, can only verify that it is not NULL:
void func(char *p );void main(){ char * p; //dangerous; an uninitialized pointer //_many lines of code; p left uninitialized by mistake if (p) //erroneously assuming that a non-NULL value indicates a valid address { func(p); // func has no way of knowing whether p has a valid address; undefined behavior expected }}
Even if your compiler does initialize pointers automatically, your code will be more readable and portable if you use explicit initializations.