struct datum *pd;Der Operator -> dient der Bezugnahme auf Komponenten einer Struktur, die über einen Zeiger adressiert wird.
pd -> jahr = 1989;ist die vereinfachte Schreibweise für
( * pd ) . jahr = 1989;Der Operator . hat höheren Vorrang als * .
Über Zeiger können jetzt auch Felder von Strukturen rekursiv durchsucht werden. Z.B. könnte man mit folgender Vereinbarung eine Ahnentafel erstellen:
BEISPIELE/b235a.c: #include <stdio.h> struct person { /* Personenbeschreibung */ char name[20]; int alter; struct person *vater; /* Zeiger auf Struktur gleichen Typs */ } pf[2]; /* Feld von 2 Personenstrukturen */ main() { int i=0; struct person *p = pf; /* Initialisierung mit Adresse des Feldes pf */ /* siehe Abschnitt 2.7. */ strcpy(p->name,"Maxi"); /* Name "Maxi" zuweisen */ p->alter=18; p->vater = pf + 1; /* &pf[1] */ p->vater->alter = 45; /* Zugriff auf pf[1] ueber Zeiger */ strcpy(p->vater->name,"Fritz"); while(i++ <= 1) { /* elementweise Ausgabe */ printf("%s ist %d Jahre\n",p->name, p->alter); p++; } }
VERBATIM/b235: #define FAM_ANZ 99; struct stamm { char name[20]; /* Zeichenfeld */ char vorname[20]; /* Zeichenfeld */ struct datum geb_datum; /* Struktur */ struct stamm *vater; /* Zeiger auf Struktur gleichen Typs */ struct stamm *mutter; /* Zeiger auf Struktur gleichen Typs */ } ahnentafel[FAM_ANZ];