Mit C können Sie mit Zeigern Chaos oder Klarheit schaffen. Es kommt darauf an, wie man es betrachtet. Die Sprache ermöglicht, dass eine beliebige Anzahl von Zeigern auf genau dieselbe Speicheradresse zeigt. Das ist kein Fehler. Es ist eine Funktion.
Nimm „i“. Deklarieren Sie „p“, „q“ und „r“ als ganzzahlige Zeiger. Richten Sie sie alle auf „i“. Der Code sieht so aus:
„c
int i;
int p, q, *r;
p = &i;
q = &i;
r = p;
„
Ganz einfach. Doch was passiert unter der Haube?
Zeiger sind nur Adressen
Im obigen Beispiel zeigt „r“ nicht auf „p“. Es zeigt auf das, worauf „p“ zeigt. Welches ist „i“.
Wenn Sie einen Zeiger einem anderen zuweisen, wird die Adresse kopiert. Der Wert auf der rechten Seite wird in die Variable auf der linken Seite verschoben. Nach der Ausführung hat „i“ vier Namen. „ich“. *p. *q. *r.
Das sind alles unterschiedliche Bezeichnungen für denselben RAM-Bereich. Sie können beliebig viele Zeiger erstellen. Die Grenze ist Ihr Gedächtnis, nicht die Sprache.
Warum das wichtig ist
Dieses Verhalten ändert die Art und Weise, wie Sie Daten verwalten. Wenn Sie einen Zeiger an eine Funktion übergeben, wirken sich alle über diesen Zeiger vorgenommenen Änderungen auf die ursprüngliche Variable aus. Wenn mehrere Funktionen Zeiger auf dieselbe Adresse enthalten, sehen alle dieselben Änderungen.
Es schafft einen gemeinsamen Zustand. Nützlich zum Caching. Gefährlich, wenn man den Überblick verliert, wer wo schreibt.
Es gibt keine Begrenzung für die Anzahl der Zeiger, die dieselbe Adresse enthalten und auf diese verweisen können.
Diese Flexibilität ist kraftvoll. Es ist auch schwierig. Ein Zeiger ändert den Wert. Alle anderen sehen es sofort. Keine Synchronisierung erforderlich. Nur roher Speicherzugriff.
Denken Sie an das Debuggen. Wenn sich eine Variable unerwartet ändert, überprüfen Sie alle Zeiger. Jeder von ihnen könnte der Übeltäter sein. Sie alle haben die gleiche Kraft. Und die gleiche Verantwortung.
Es ist keine komplexe Logik. Es handelt sich um eine einfache Zeigerarithmetik. Aber die Auswirkungen ziehen sich durch Ihr gesamtes Programm. Eine Adresse. Viele Namen. Alles verbunden.
























