Ein Array besteht im Prinzip nur aus Zeigern, welche auf die zum Array gehörenden Variablen zeigen. Der Zugriff auf die Variablen erfolgt also mittels Zeiger, wovon wir bisher nicht viel mitbekommen haben. Der Zugriff mittels den eckigen Klammern [ ] ist nur eine Möglichkeit, durch welche im Hintergrund ein Zeiger verwendet wird. Alternativ können wir auch direkt mit den Zeigern arbeiten.
Positionszeiger
Im folgenden Beispiel erstellen wir einen Positionszeiger, der immer auf einen Wert des Arrays zeigt. Die Adresse des ersten Elements erhalten wir durch den bloßen Feldnamen. Bei eindimensionalen Feldern sind kein Adressoperator & und keine eckigen Klammern notwendig.
int punkte[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; // Positionszeiger int *pos; // Position auf erstes Element setzen (punkte[0]) pos = punkte; printf("(punkte[0]) Wert pos: %d\n", *pos); // Position auf naechstes Element setzen (punkte[1]) pos++; printf("(punkte[1]) Wert pos: %d\n", *pos); // Position auf 5. Element setzen (punkte[4]) pos = punkte + 4; printf("(punkte[4]) Wert pos: %d\n", *pos); // Position auf vorheriges Element setzen (punkte[3]) pos--; printf("(punkte[3]) Wert pos: %d\n", *pos);
(punkte[0]) Wert pos: 1 (punkte[1]) Wert pos: 2 (punkte[4]) Wert pos: 5 (punkte[3]) Wert pos: 4
Alternativ erhalten wir die erste Adresse eines Feldes auch mit dem Adressoperator & und der Indexierung auf das erste Element, z.B. &punkte[0].
Ermittlung der Index-Nummer
Der Positionszeiger zeigt auf ein Element des Arrays. Möchte man den Index (Position) ermitteln, kann man das durch folgende Subtraktion tun: Adresse Positionszeiger – Startadresse Array.
int punkte[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; // Positionszeiger, Setzen auf 6.Element int *pos = punkte + 5; // Index berechnen int index = pos - punkte; printf("Index: %d\n", index); printf("Wert pos / punkte[index]: %d\n", punkte[index]);
Index: 5 Wert pos / punkte[index]: 6