001
21.12.2017, 10:25 Uhr
ao
(Operator)
|
Verschoben nach C/C++ (ANSI-Standard), weil es keine Unix-spezifische Frage ist.
Das erste Beispiel deklariert eine Pointervariable pt, initialisiert sie aber nicht. D.h. der Zeiger zeigt auf eine zufällige Speicheradresse. Der Schreibzugriff (*pt=42;) schreibt dann den Wert 42 auf diese zufällige Adresse, was zufällig funktionieren kann oder auch nicht (Programmabsturz).
Das zweite Beispiel macht das gleiche, initialisiert den Zeiger aber auf den Null-Pointer. D.h. der Zeiger zeigt auf die Adresse 0, was in C/C++ reserviert ist für "ungültiger Zeiger". Der Schreibzugriff wird mit Sicherheit abstürzen, wenn das Betriebssystem Memory-Protection hat (was für alle moderenen BS gilt). Insofern ist das 2. Programm nicht ganz so schlimm falsch wie das erste.
Ein richtiges Beispiel geht so:
C++: |
int t; int * pt = &t; *pt = 42;
|
Es gibt eine definierte Variable (t), auf die man pt zeigen lässt, bevor man Daten schreibt.
Jetzt fragst du dich vielleicht, warum man sich die Mühe mit dem pt macht und nicht direkt int t = 42; sagt. Das liegt daran, dass das Beispiel zu trivial ist, um die praktische Verwendung von Pointern zu zeigen. Dieser Post wurde am 21.12.2017 um 10:26 Uhr von ao editiert. |