Structs können ähnlich Arrays schon bei der Definition Werte bekommen:
struct Note_s { char *pitch; int duration; }; struct Note_s shortG = {"g", 3};
Die Anfangswerte werden in der Reihenfolge angegeben, in der die Elemente in der Strukturdeklaration stehen. Bei größeren structs wird das ziemlich unübersichtlich, weshalb gcc und C99 folgendes erlauben:
struct Note_s shortG = {.pitch="g", .duration=3};
Tipparbeit bei structs sparen und Intention klarer machen:
typedef int boolean; typedef char line[LN_LEN]; typedef struct Note_s { char *pitch; int duration; } Note;
Im Wesentlichen: typedef funktioniert wie Variablendefinition, nur wird nicht eine Variable, sondern ein Typ definiert. Nach den Zeilen oben:
boolean b; line l; Note stillenacht[] = { {"g", 3}, {"a", 1}, {"g", 2}, }; void playNote(Note *note) { int freq=(int)(computeFreq(note->pitch)+0.5); beep(freq, note->duration*BEAT); }