Un nombre de estructura no de tipo definido en C requiere que se agregue "struct" en todas partes donde se usa el nombre de tipo, por lo que la mayoría de la gente usa typedef para crear un nuevo nombre para el tipo que no necesita tener la palabra clave struct incorporada todo el tiempo.
Las razones para hacer esto son la legibilidad del código, el mecanografiado reducido, y probablemente la claridad también, pero typedefs en realidad puede oscurecer la información sobre los tipos de puntero.
Honestamente, la necesidad de typedef para crear nuevos nombres para las estructuras es una reliquia, y es una pena que C99 no siga el ejemplo de C++ y lo elimine.
En su libro * Expert C Programming *, Peter van der Linden defiende que los typedefs para las estructuras son inútiles y no debería molestarse. Me gusta esto. Todo lo que hace typedef es que te ahorra escribir 'struct' en algunos lugares como declaraciones y prototipos. No vale la pena la ofuscación. Quiero saber inmediatamente cuándo tengo que usar '->' o '.'. Typedefs hace esto más difícil. – Jens