Le strutture sono tipi di variabili in cui è possibile memorizzare dati eterogenei. Si possono considerare simili a vettori in cui ogni elemento può avere un tipo diverso, e in cui gli elementi sono identificati non da un numero ma da un nome.
Il linguaggio C fornisce un insieme di tipi di dati base, quali int, char, float, ecc. È però possibile definire nuovi tipi usando la primitiva typedef. I nuovi tipi di dato vengono in questo modo definiti a partire da quelli vecchi. Una volta definito un nuovo tipo, questo è del tutto equivalente ai tipi base del linguaggio.
Qui sotto vediamo per quale motivo le strutture e i tipi sono utili, e alcune loro applicazioni. Altre applicazioni, quali le liste e le strutture di dati, verranno spiegate nel dettaglio in un capitolo successivo.