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.