Auf das reservierte Wort struct werden, eingeschlossen von geschweiften Klammern, Name unt typ der Felder angegeben. Z.B.:
struct { int tonhoehe; double dauer; double abstand; } eine_note;
deklariert ein Objekt namens eine_note
, welches aus einem
int namens tonhoehe und zwei doubles namens dauer
bzw. abstand besteht.
Eine solche Deklaration ist allerdings selten; sie definiert genau ein Objekt der angegebenen Struktur. Will man, was normalerweise der Fall ist, mehrere Objekte dieses Typs an verschiedenen Stellen des Quelltextes deklarieren oder Funktionsparameter bzw. Rückgabewerte dieses Typs angeben, benötigt man eine Möglichkeit den Typ selbst namentlich yu referenzieren. Dies geschieht, indem man einen Namen für den Typ hinter dem struct angibt.
struct note { int tonhoehe; double dauer; double abstand; } eine_note; ... .. struct note noch_eine_note; void f(struct note diese_note) { ... }
Bei dieser Art der Deklaration braucht auch nicht sofort eine Variable deklariert zu werden. Schreibt man beispielsweise: struct note { int tonhoehe; double dauer; double abstand; };
so wird ausschließlich der Typ struct note deklariert, Variablendeklarationen können dann später folgen.
Damit man nun nicht immer struct note schreiben muß, wenn man den so deklarierten Typ meint, gibt es in C die Möglickeit, jede Deklaration durch ein vorangestelltes typedef als reine Typdeklaration kenntlich zu machen. Dies ist nicht auf structs beschränkt. So könnte man schreiben:
typedef struct { int tonhoehe; double dauer; double abstand; } Note; typedef int Ganzzahl; typedef unsigned int Index
und würde so die Typen Note,Ganzzahl,Index quasi als Aliasnamen für den definierten struct bzw. für int oder unsigned int definieren, und könnte dann Variablen der neuen Typen definieren.
Wie alle Variablen können auch structs bei der Deklaration initialisiert werden. DIes gescheit mit derselben Syntax wie bei Vektoren: auf das Gleichheitszeichen folgt, eingeschlossen in geschweifte Klammern, eine Auflistung der Werte der Felder, durch Kommata getrennt.
Note c3 = {60,1.5,0.75};