5 Zeiger
Zeiger speichern Adressen ab, ab denen Speicherbereiche von Arrays oder auch einfacher Variablen beginnen. Um Arrays in Funktionen zu verarbeiten, ist es sehr viel effizienter, nur einen Zeiger auf die Anfangsadresse dieser Arrays zu der Funktion zu übergeben, als alle Werte, die in dem u.U. sehr großen Array gespeichert sind. Leider hat die Sache auch einen Haken: der Zeiger enthält zwar eine Anfangsadresse, jedoch keine Information darüber, ob dieser Speicherbereich danach tatsächlich auch einem Array zugehört, noch, wie groß dieses Array ggf. ist. Bei dem Versuch in das über einen Zeiger übergebene Array zu schreiben, kann es deshalb, wenn das Array nicht mehr existiert, oder Elemente versucht werden anzusprechen, die nicht existieren, zu schweren Ausnahmefehlern kommen. Jedoch kommt man weder in C noch in C++ um die Verwendung von Zeigern herum. Implizit verwendet man auch Zeiger bei der Verwendung von Arrays und auch von jeder Variablen läßt sich die Adresse auslesen, an der deren Inhalt im Speicher abgelegt ist. Die folgende Tabelle zeigt für Zeiger (Pointer), Arrays und gewöhnliche Variablen, die Möglichkeiten, wie man jeweils auf Werte oder Adressen zugreifen kann:
| Typ | Deklaration | Initialisierung | Liefert Inhalt (des ersten Elements) | Liefert Inhalt (des ersten Elements) | Adresse (des ersten Elements) | Adresse (des ersten Elements) |
|---|---|---|---|---|---|---|
| Integer Variable | int a; | a=7; | a | &a | ||
| Integer Array | int a[3]; | a[0]=1;a[1]=2;a[2]=3; | *a |
a[0] |
a |
&a[0] |
| Integer Zeiger | int* z; | z=a; | *a |
a[0] |
a |
&a[0] |
Tabelle 5-1: Übersicht zur Verwendung von Zeigern und Arrays