VERBATIM/b222a: struct datum { /* Deklaration des Typs */ short jahr; char monat[4]; short tag; }; |
Dadurch erfolgt die Definition der Variablenbezeichner heute und hochzeits_tag als Strukturinstanzen des Typs struct datum und damit auch die Speicherplatzvergabe.
VERBATIM/b222b: struct datum heute, hochzeits_tag; /* Definition */
Deklaration und Definition in einer Anweisung:
Die letzte Vereinbarung definiert ein Feld mit 20 Elementen. Jedes Element ist eine Struktur des Typs datum.
VERBATIM/b222c: struct datum { /* Deklaration des Typs */ short jahr; char monat[4]; short tag; } heute, feiertage[20]; /* Definition von Variablen dieses Typs */
Mit dem Operator . kann man auf einzelne Komponenten der Struktur zugreifen.
allg.: einfacher_ausdruck . bezeichnereinfacher_ausdruck ist ein Bezeichner für eine Strukturinstanz.
C erlaubt die Verwendung gleicher Bezeichner für Strukturtyp, Strukturelemente und Variablenbezeichner:
VERBATIM/b222d: heute.jahr = 1992; feiertage[i].tag=24;
VERBATIM/b222e: struct wert { /* Deklaration eines Typs */ char kennung; int wert; /* Deklaration Strukturelement */ } wert; /* Definition einer Variable */
BEISPIELE/b222a.c: #include <stdio.h> struct datum { short jahr; char monat[4]; short tag; } heute; main() /* Ausgabe: 9. Nov. 1989 */ { heute.jahr = 1989; strcpy(heute.monat, "Nov"); /* 3 Zeichen! */ printf("%d. %s. %d\n", heute.tag = 9, heute.monat, heute.jahr); }
BEISPIELE/b222b.c: #include <stdio.h> #define MAX 20 struct person { char name[MAX]; int alter; }; main() /* Strukturen */ { int i=1; struct person person, pf[MAX]; strcpy(person.name,"Maxi"); person.alter=18; printf("%s ist %d Jahre\n",person.name, person.alter); while(i<MAX) pf[i++]=person; pf[6].alter+=6; pf[6].name[3]='\0'; printf("%s ist %d Jahre\n",pf[6].name, pf[6].alter); printf("%s ist %d Jahre\n",&pf, pf[0].alter); } /* pf[0] unbelegt ! */