C Hinweise
Zeiger erstellen
Aus dem vorherigen Kapitel haben Sie gelernt, dass wir mit dem Referenzoperator die Speicheradresse einer Variablen ermitteln können &
:
Beispiel
int myAge = 43; // eine int-Variable
printf("%d", myAge); // Gibt den Wert von myAge aus (43)
printf("%p", &myAge); // Gibt die Speicheradresse von myAge aus (0x7ffe5367e044)
Try it Yourself »
Ein Zeiger ist eine Variable, die die Speicheradresse einer anderen Variablen als Wert speichert.
Eine Zeigervariable zeigt auf einen Datentyp (wie int
) desselben Typ und wird mit dem Operator *
erstellt.
Dem Zeiger wird die Adresse der Variablen zugewiesen, mit der Sie arbeiten:
Beispiel
int myAge = 43; // Eine int-Variable
int* ptr = &myAge; // Eine Zeigervariable mit dem Namen ptr, die die Adresse von myAge speichert
// Geben Sie den Wert von myAge aus (43)
printf("%d\n", myAge);
// Geben Sie die Speicheradresse von myAge aus (0x7ffe5367e044)
printf("%p\n", &myAge);
// Geben Sie die Speicheradresse von myAge mit dem Zeiger aus (0x7ffe5367e044)
printf("%p\n", ptr);
Try it Yourself »
Beispiel erklärt
Erstellen Sie eine Zeigervariable mit dem Namen ptr
, die auf eine int
-Variable zeigt (myAge
). Beachten Sie, dass der Typ des Zeigers mit dem Typ der Variablen übereinstimmen muss, mit der Sie arbeiten (int
in unserem Beispiel).
Verwenden Sie den Operator &
, um die Speicheradresse der Variablen myAge
zu speichern und sie der zuzuweisen Zeiger.
Jetzt enthält ptr
den Wert der Speicheradresse von myAge
.
Dereferenzierung
Im obigen Beispiel haben wir die Zeigervariable verwendet, um die Speicheradresse einer Variablen abzurufen (zusammen mit dem &
Referenz-Operator verwendet).
Sie können den Wert der Variablen, auf die der Zeiger zeigt, auch mithilfe des *
-Operators (des Dereferenzierungsoperators) ermitteln:
Beispiel
int myAge = 43; // Variable Aussage
int* ptr = &myAge; // Zeigerdeklaration
// Referenz: Geben Sie die Speicheradresse von myAge mit dem Zeiger aus (0x7ffe5367e044)
printf("%p\n", ptr);
// Dereferenzierung: Geben Sie den Wert von myAge mit dem Zeiger aus (43)
printf("%d\n", *ptr);
Try it Yourself »
Beachten Sie, dass das Zeichen *
hier verwirrend sein kann, da es in unserem Code zwei verschiedene Dinge bewirkt:
- Bei Verwendung in der Deklaration (
int* ptr
) wird eine Zeigervariable erstellt. - Wenn es nicht in der Deklaration verwendet wird, fungiert es als Dereferenzierungsoperator.
Gut zu wissen: Es gibt zwei Möglichkeiten, Zeigervariablen in C zu deklarieren:
int* myNum;
int *myNum;
Hinweise zu Zeigern
Zeiger sind eines der Dinge, die C von anderen Programmiersprachen abheben Python und Java.
Sie sind in C wichtig, weil sie es uns ermöglichen, die Daten im Speicher des Computers zu manipulieren. Dadurch kann der Code reduziert und die Leistung verbessert werden. Wenn Sie mit Datenstrukturen wie Listen, Bäumen und Diagrammen vertraut sind, sollten Sie wissen, dass Zeiger für deren Implementierung besonders nützlich sind. Und manchmal muss man sogar Zeiger verwenden, zum Beispiel beim Arbeiten mit Dateien.
Aber seien Sie vorsichtig; Zeiger müssen mit Vorsicht behandelt werden, da es möglich ist, Daten, die in anderen Speicheradressen gespeichert sind, zu beschädigen.