Arrays und Pointer -- Allokation von Arrays -- Pointerarithmetik

Pointerarithmetik (1/3)

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.

int a[10];
int* b = a;

for (int i = 0; i < 9; i++)     // Zugriff als Array
   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.