Mit C können Sie mit der Erinnerung Chaos oder Klarheit schaffen. Sie können Dutzende Zeiger haben, die alle auf genau dieselbe Stelle im RAM zielen. Das ist kein Fehler. Es ist eine Funktion.
Stellen Sie sich ein Szenario vor, in dem Sie eine Ganzzahl „i“ deklarieren. Anschließend erstellen Sie drei Ganzzahlzeiger: „p“, „q“ und „r“.
„c
int i;
int p, q, *r;
p = &i;
q = &i;
r = p;
„
Der Code macht genau das, was Sie erwarten könnten. „p“ erfasst die Adresse von „i“. „q“ macht dasselbe. „r“ kopiert alles, was „p“ enthält. Da „p“ die Adresse von „i“ enthält, zeigt „r“ auch auf „i“.
Nachdem diese Zuweisungen ausgeführt wurden, verfügen Sie über eine Variable mit vier Namen. „i“ ist das Original. *p greift darauf zu. *q greift darauf zu. *r greift darauf zu.
So funktioniert die Zeigerzuweisung
Der Schlüssel hier liegt darin, zu verstehen, was während der Aufgabe passiert. Wenn Sie „q = &i“ schreiben, kopieren Sie nicht den Wert von „i“. Sie kopieren den Speicherort von „i“.
Wenn Sie „r = p“ schreiben, kopieren Sie die Adresse von „p“ nach „r“. Es wird kein neuer Speicher zugewiesen. Es werden keine Daten dupliziert. Der Adresswert bewegt sich von einer Zeigervariablen zu einer anderen.
Dies bedeutet, dass es keine feste Grenze dafür gibt, wie viele Zeiger dieselbe Adresse enthalten können. Sie können tausend Zeiger erstellen, die alle auf „i“ zeigen. Sie beziehen sich alle auf denselben Speicherort.
Es gibt keine Begrenzung für die Anzahl der Zeiger, die dieselbe Adresse enthalten (und daher auf diese verweisen können).
Dieses Verhalten ist von grundlegender Bedeutung für die Speicherverwaltung in C. Es ermöglicht flexible Datenstrukturen wie verknüpfte Listen und Bäume. Es ermöglicht auch effiziente Funktionsargumente. Übergeben Sie einen Zeiger anstelle einer Kopie. Ändern Sie die Originaldaten direkt.
Aber es birgt auch Risiken. Ändern Sie „i“ durch „p“. Schauen Sie sich „i“ bis „q“ an. Der Wandel ist überall sichtbar. Es gibt nur eine Quelle der Wahrheit.
Die Variable „i“ hat jetzt vier Namen. „ich“. *p. *q. *r.
So funktioniert C. Sie haben direkten Zugriff auf Speicheradressen. Sie können Alias-Daten frei verwenden. Man muss nur vorsichtig sein, was man ändert.





























