next up previous contents index
Nächste Seite: 6.6 Referenz Aufwärts: 6. Zeiger Vorherige Seite: 6.4 Dynamische Felder mittels   Inhalt   Index


6.5 Zeiger auf Strukturen

Wir betrachten die Struktur Student (§ 5.2) 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
  ...
}

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. (siehe Ex650.cc) Dies zeigt sich insbesondere beim Zugriff auf Feldelemente von vorname (d.h., einzelne Zeichen). Der Zugriff auf das 0. Zeichen erfolgt mittles

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)

Beachten Sie, daß pg->vorname einen Zeiger auf den Typ char darstellt und der Dereferenzierungsoperator * vor der Addition + ausgeführt wird. Vermuten und testen Sie, was bei Verwendung von *pg->vorname+3 herauskommt.


Gundolf Haase 2004-01-15