Wenn wir einen Pointer haben, der auf eine Reihe von Objekten zeigt (wie in obigem Arraybeispiel oder durch Allokation wie im nächsten Abschnitt), so können wir nacheinander auf die entsprechenden Objekte zugreifen. Dazu dient die sogenannte Pointerartihmetik: Das Rechnen mit Pointern.
Auf der Menge der Pointer ist es erlaubt mit den Operatoren +
,
-
, +=
und -=
sowie den Inkrement- und Dekrementoperastoren zu rechnen.
Argumente sind ein Pointer und ein Integer. Das Ergebnis einer Inkrementation
ist z.B. ein Zeiger, der auf den auf ein Objekt folgenden Speicherbereich
zeigt. Liegen also mehrere Objekte eines Typs direkt hintereinander, so
läuft ein Pointer, der immer um 1 inkrementiert wird diese Liste ab.
Daher ist es auch notwendig, daß bei Array alle Objekte unmittelbar
nacheinander kommen. Folgende zwei for
-Schleifen machen genau dasselbe.
Einmal mit Zugriff als Array und einmal mit Pointerarithmetik.
for (int i = 0; i < 9; i++) // Zugriff als Array
int a[10];
int* b = a;
a[i] = i;
for (i = 0; i < 9; i++) // Pointerarithmetik
*(b+i) = i;
Der Ausdruck *(b+i)
addiert zuerst i Speicherbereiche der Objektgröße
eines integer zum Pointer i und dereferenziert anschließend das zugehörige
Objekt. b
wird dabei nicht selbst verändert.