Warum t, &t[0] und t, die in einen Zeiger konvertiert werden, dieselbe Adresse haben
Ein Array ist ein zusammenhängender Speicherblock Elemente desselben Datentyps enthalten. Wenn Sie ein Array deklarieren, weist der Compiler einen Speicherblock zu und erstellt Zeiger auf jedes Element innerhalb dieses Blocks.
Fall 1: t und &t[0]
Wenn Sie t alleine verwenden (ohne Indizes), wird eine Array-zu-Zeiger-Konvertierung durchgeführt, die einen Zeiger auf das erste Element des Arrays generiert. Dieses Verhalten entspricht der Verwendung von &t[0], das explizit die Adresse des ersten Elements zurückgibt. Daher haben t und &t[0] den gleichen Wert.
Fall 2: &t
Wenn Sie jedoch den &-Operator auf t anwenden, ist dies nicht der Fall löst die Array-zu-Zeiger-Konvertierung aus. Stattdessen übernimmt &t direkt die Adresse von t selbst, was zu einem Zeiger auf das gesamte Array führt.
Im Speicher befinden sich das erste Element des Arrays und der Anfang des Arrays an derselben Stelle. Daher haben die Zeiger t, &t[0] und u (was ein Zeiger auf t ist) alle dieselbe Adresse.
Erklärung der Ausgabe:
Die gegebene Code zeigt dieses Verhalten:
int t[10]; int * u = t; cout << t << " " << &t << endl; cout << u << " " << &u << endl;
Ausgabe:
0045FB88 0045FB88 0045FB88 0045FB7C
Die Ausgabe zeigt das t, &t[0] und u haben den gleichen Wert (0045FB88), was ihre Äquivalenz als Zeiger bestätigt.
Das obige ist der detaillierte Inhalt vonWarum haben „t', „&t[0]' und ein Zeiger auf „t' dieselbe Adresse?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!