01. Operatoren
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;