16.09.2017 Aufrufe

Vorkurs Informatik

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

C.3 Zeiger und Referenzen 339<br />

(a) Vereinfachte Zeiger-Repräsentierung<br />

(b) Initialisierung von Zeiger- und Referenz-Variablen<br />

Abbildung C.6: Schematische Darstellung zur Deklaration und Initialisierung von Zeigervariablen<br />

(ptr_1, ptr_2) sowie Referenzvariablen (ref_1)<br />

Werte, welche die Adressen von Variablen repräsentieren, spezielle Variablen einzuführen, die als Adressvariablen<br />

bezeichnet werden. Gekennzeichnet werden Adressvariablen durch ein vorangestelltes Symbol<br />

„ * “. In dem Beispiel<br />

int *ptr_a = &a[0];<br />

ist ptr_a eine Adressvariable. Neben der Bezeichnung „Adressvariable“ ist insbesondere die Bezeichnung<br />

Zeiger (auch Zeigervariable oder Pointer genannt) gebräuchlich, da derartige Variablen auf eine Adresse<br />

zeigen, an der Werte eines speziellen Datentyps gespeichert sind. Pointer sind somit im eigentlichen Sinne<br />

keine eigenen Datentypen, sondern werden vom jeweiligen Typ abgeleitet. Die Adressvariable ptr_a zeigt<br />

daher auf eine Speicheradresse mit Inhalt vom Typ Integer.<br />

Obwohl diese Einleitung zum Prinzip von Zeigern für das Array erfolgte, ist dieser Mechanismus nicht auf<br />

Arrays beschränkt, sondern ein in der Programmiersprache C++ häufig genutztes Prinzip. Daher wollen<br />

wir im Folgenden die Verwendung von Zeigern noch ausführlicher diskutieren. In der Abbildung C.5 sind<br />

hierzu zwei verschiedene Ausschnitte aus dem Speicher und dessen Veränderung aufgrund einer Sequenz<br />

von vier C++-Anweisungen dargestellt. Im ersten Schritt wird durch die Anweisung<br />

int i = 423;<br />

ein Speicherbereich von 4 Bytes an der Adresse 0x1199 (in dem hier vorliegenden Beispiel) für die Variable<br />

i vom Typ Integer definiert und in die Adresse der Wert 423 gespeichert (s. Abbildung C.5a). Abbildung<br />

C.5b zeigt einen zweiten Speicherbereich, der durch die Anweisung<br />

int *ptr_1;<br />

adressiert wurde. Gemäß der Erklärung zu Adressvariablen wird durch die Anweisung an der Adresse<br />

0x6142 für die deklarierte Variable ptr_1, die einen Zeiger auf eine Adresse vom Typ Integer repräsentiert,<br />

ein Speicherbereich belegt. Da die Variable zunächst nur deklariert, ihr also noch kein Wert zugewiesen<br />

wurde, ist der Inhalt des Speicherbereichs an der Adresse 0x6142 nicht eindeutig definiert. Es ist daher<br />

unbedingt empfehlenswert auch Adressvariablen zu initialisieren:<br />

ptr_1 = 0;

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!