Adressoperator &

Merke: Der Adressoperator & ermittelt von einem Ausdruck die zugehörige Adresse im Hauptspeicher des Computers.

Beispiel:

int i_v = 0xl 0 ; // die Va r i abl e i v e rh äl t den Hex-We rt 01⁄210

// Die Adresse der Va riabl e n :L_v wird dem Ze lge r pi v zugewiesen :
int * pi_v = &i v;

Dereferenzerierungsoperator *

Merke: Der Dereferenzierungsoperator * interpretiert den Ausdruck hinter dem Dereferenzierungsoperator als Zeiger. Der Inhalt des Zeigers wird als Adresse interpretiert, also der Speicherplatz mit dieser Adresse aktiviert. Anschließend wird der Inhalt des Speicherplatzes mit dieser Adresse ausgelesen.

Beispiel: i_v = *pi v; Wert

Ist der Inhalt des Zeigers pi_v die Zahl 0, so wird in der Codezeile versucht, den Inhalt der Adresse O zu ermitteln. Dieser Speicher ist jedoch gegen softwareseitige Zugriffe geschützt. Es wird daher bei einem “Nullpointer” eine Fehlermeldung ausgelöst.

Ein uninitialisierter Zeiger ist unbedingt zu vermeiden, sonst kann ein unregelmäßig auftretender Fehler entstehen! Wenn den Zeiger zufälligerweise eine ungültige oder undefinierte Adresse enthält und auf diesen dereferenzierend zugegriffen wird, wird das Programm ggf. mit einem Laufzeitfehler beendet!

Dringende Empfehlung:
Zeiger müssen bei Zeigerdeinition sofort initialisiert werden! Der Zeiger muss nach der Initialisierung entweder eine gültige Adresse oder NULL enthalten. Wenn ein Zeiger ungültig wird, muss er sofort auf NULL gesetzt werden!

Beispiele:

// Der Zeiger pi_v wird mit NULL initialisiert
// -> offensichtlich kein sinnvoller/ungültiger Inhalt
int * pi_v = NULL;
int i_v = Ox1O;
// Adresse der Variablen i_v wird dem Zeiger pi_ v zugewiesen -> gültige Adresse: OK
int * pi_v = &i_v;