Suche
Suche Menü

Zeigerarithmetik

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