Zeiger auf Strukturen

Wir betrachten die Struktur Student und definieren einen Zeiger darauf.

//	Pointer at structure
{ struct Student
  {
   ...
  };
  Student peter, *pg;
//      init peter
  ...
  pg = &peter;           // pointer at peter
  cout << (*pg).vorname; // conventional access
  cout <<   pg->vorname; // better access
  ...
}

gesamtes Programm

Die Zugriffe (*pg).vorname und pg->vorname sind völlig äquivalent. Allerdings verbessert letzterer deutlich die Lesbarkeit eines Programmes insbesondere, wenn der Zeiger ein dynamisches Feld des Typs Student darstellt. Dies zeigt sich insbesondere beim Zugriff auf Feldelemente von vorname (d.h., einzelne Zeichen). Der Zugriff auf das 0.Zeichen erfolgt mittels

pg->vorname[0] oder *pg->vorname oder (*pg).vorname[0] oder *(*pg).vorname

und der Zugriff auf das 3.Zeichen mittels

pg->vorname[3] oder *(pg->vorname+3) oder (*pg).vorname[3] oder *((*pg).vorname+3)

Beachte, dass pg->vorname einen Zeiger auf den Typ char darstellt und der Dereferenzierungsoperator * vor der Addition + ausgeführt wird. Vermuten und teste, was bei Verwendung von *pg→vorname+3 herauskommt.