In ogni caso, come troverai scritto sul tuo libro, il typedef serve a creare degli alias per altri tipi. L'idioma del "typedef struct { ... }" è una "espressione idiomatica del C" dovuta al fatto che se dichiari una struct "normalmente":
poi per usarla devi sempre scrivere sempre "struct nomestruct", dato che in C le struct "vivono" in un namespace diverso rispetto agli altri nomi. Per alleggerire la notazione, spesso si fa invece:codice:struct nomestruct { int a; };
che dichiara "nomestruct" come alias della struct anonima "struct { int a; }"; dato che nomestruct ora non è inteso come nome dato ad una struct, ma come typedef, non serve più specificare "struct nomestruct" quando lo si vuole usare (anzi, è un errore), ma basta "nomestruct".codice:typedef struct { int a; } nomestruct;