Navigation

2.3.5 Zeiger auf Strukturen

Definition eines Zeigers auf Struktur datum:
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 * .

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++;
   }
}

Über Zeiger können jetzt auch Felder von Strukturen rekursiv durchsucht werden. Z.B. könnte man mit folgender Vereinbarung eine Ahnentafel erstellen:

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];

Navigation