C ermöglicht, dass ein einzelner Speicherort mehrere Aliase hat. Sie können mehrere Zeiger deklarieren und alle auf dieselbe Variable verweisen. Das ist nicht nur eine Eigenart der Sprache. Es handelt sich um eine grundlegende Funktion, die die Art und Weise verändert, wie Sie Speicher und Datenzugriff verwalten.
Betrachten Sie dieses Szenario. Sie benötigen mehrere Handles für dieselbe Ganzzahlvariable. Sie können sie alle deklarieren und sofort verknüpfen.
„c
int i;
int p, q, *r;
p = &i;
q = &i;
r = p;
„
In diesem Block sind „p“, „q“ und „r“ alle ganzzahlige Zeiger. Sie alle zeigen auf „i“. Die Zuweisung „r = p“ kopiert nicht den Wert von „i“. Es kopiert die in „p“ gespeicherte Adresse. Da „p“ die Adresse von „i“ enthält, enthält „r“ jetzt auch die Adresse von „i“.
Eine Variable, viele Namen
Nach der Ausführung befindet sich eine ganzzahlige Variable „i“ im Speicher. Es gibt jedoch vier Möglichkeiten, auf genau diese Daten zu verweisen.
i: Der ursprüngliche Variablenname.*p: Der Wert an der Adresse in „p“.*q: Der Wert an der Adresse in „q“.*r: Der Wert an der Adresse in „r“.
Sie sind identisch. Ändern Sie „i“. „p“ ändert sich. Ändern Sie „ q“. „i“ ändert sich. Die Daten befinden sich an einer Adresse. Die Zeiger sind nur Etiketten.
Es gibt keine feste Grenze dafür, wie viele Zeiger dieselbe Adresse enthalten können. Sie können sie unbegrenzt verketten. a = &i; b = a; c = b; d = c; funktioniert genauso. Jede Zuweisung kopiert den Zeigerwert. Es wird keine neue Kopie der Daten erstellt.
„Eine beliebige Anzahl von Zeigern kann auf dieselbe Adresse zeigen.“
Diese Funktion ist hilfreich für die Weitergabe von Referenzen um Funktionen oder den Aufbau verknüpfter Strukturen. Es hält Ihre Speichernutzung gering. Es birgt auch ein Risiko. Wenn Sie einen dieser Zeiger dereferenzieren, berühren Sie dasselbe zugrunde liegende Byte. Fehler in einem Pseudonym wirken sich auf alle aus. Bei korrekter Verwendung ist diese Funktion jedoch eine Standard-C-Praxis.




























