Du har ju fått flera exempel på hur man kan använda en struct redan, så antar att den delen är utredd.
Att definiera en struktur gör med
struct <namn> {
/* medlemmar */
};
d.v.s typedef behövs inte alls.
typedef är egentligen ett dåligt namn på vad detta nyckelord gör i C då det inte skapar nya typer utan ger alias till existerande typer.
typedef struct <namn> {
...
} <typ_namn>;
är bara en tillåten sammanslagning av två separata uttryck
definitionen av den nya typen "struct <namn>"
ge "struct <namn>" aliaset <typ_namn>
Man skulle även kunna skriva det som två C-uttryck
struct <namn> {
...
};
typedef struct <namn> <typ_namn>;
typedef kan ju även användas på primitiva typer, något som görs väldigt frekvent. Ett exempel väldigt viktigt sådant fall är definition av heltalstyper med en specifik kapacitet. I C säger bara standarden att char är den minsta adresserbara enheten, det finns inget som säger att det ska vara 8-bitar! Sedan säger man att sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long). Sedan C99 finns standardtyper med specifik storlek och här används typedef för att rent logiskt skapa en ny typ (men rent formell sett ur C-kompilators perspektiv är det fortfarande bara ett alias).
För att definiera typen int32_t så gör man typiskt detta på en 32/64-bitars CPU
medan man måste använda denna definition på en 16-bitars CPU där int kommer vara 16-bitar
Är struct ungefär som en klass? Båda definierar en ny typ, men i en klass har man klistrat ihop funktioner vars beteende typiskt påverkas av det aktuella tillståndet av den instans av typen som är associerad med anropet, en C struct har ingen direkt motsvarighet. I C++ är class och struct exakt samma sak förutom att en klass definierad med struct har public som förval för medlemmar och en klass definierad med class har private som förval.
Så svaret kan vara både ja och nej lite beroende på hur man ser på det
I praktiken så är svaret också både ja och nej, ibland använder C-programmerare struct exakt som en C++/C#/Java-programmerare använder klasser. Men OOD är långt ifrån det enda sätt att strukturera ett problem och väldigt många problem passar faktiskt rätt illa för OOP och i dessa lägen använder man struct som just bara en typ utan att ha funktioner som är hårt associerade med en viss instans (ungefär som att enbart programmera med statiskt metoder i Java/C#).