Для неструктурированного имени структуры в C требуется, чтобы «struct» добавлялся везде, где используется имя типа, поэтому большинство людей используют typedef для создания нового имени для типа, для которого не требуется, чтобы ключевое слово struct добавляло все время.
Причинами этого являются удобочитаемость кода, уменьшенная типизация и, возможно, ясность, но typedefs может фактически скрыть информацию о типах указателей.
Честно говоря, необходимость typedef для создания новых имен для структур является пережитком, и обидно, что C99 не последовал примеру C ++ и удалил его.