Heim  >  Artikel  >  Backend-Entwicklung  >  Warum entspricht die Adresse eines Arrays in C der Adresse eines Zeigers auf sein erstes Element?

Warum entspricht die Adresse eines Arrays in C der Adresse eines Zeigers auf sein erstes Element?

DDD
DDDOriginal
2024-11-22 08:08:10181Durchsuche

Why is the address of an array in C equivalent to the address of a pointer to its first element?

Verstehen der Äquivalenz von Array-Adressen und konvertierten Zeigern

In der Programmiersprache C ist es eine gängige Praxis, ein Array in ein zu konvertieren Zeiger auf sein erstes Element mithilfe der Array-zu-Zeiger-Konvertierung. Dies wirft die Frage auf, warum die Adresse des Arrays mit der Adresse des konvertierten Zeigers übereinstimmt.

Um dieses Konzept zu veranschaulichen, betrachten wir den folgenden Code:

int t[10];

int *u = t;

cout << t << " " << &t << endl;
cout << u << " " << &u << endl;

Die Ausgabe Dieser Code demonstriert die Äquivalenz von Array-Adressen und konvertierten Zeigeradressen:

0045FB88 0045FB88
0045FB88 0045FB7C

Um dieses Phänomen zu verstehen, müssen wir zwei unterschiedliche Bedeutungen erkennen, die mit dem Symbol verbunden sind t:

  • Array-Ausdruck: Bei alleiniger Verwendung wird t als Array-Ausdruck behandelt. Dieser Ausdruck wird in den meisten Kontexten, einschließlich Ausgabeoperationen, automatisch in einen Zeiger auf das erste Element des Arrays (d. h. &t[0]) konvertiert.
  • Zeiger auf Array: Wenn ihm vorangestellt wird Mit dem &-Operator wird t als Zeiger auf das Array selbst behandelt. Diese Operation liefert die Adresse des gesamten Arrays, nicht nur seines ersten Elements.

In unserem Code zeigt die erste Zeile der Ausgabe die Adresse von t (dem Array) und die Adresse von &t ( der Zeiger auf das Array). Da Arrays zusammenhängende Speicherblöcke sind, sind ihre Startadressen identisch.

Die zweite Ausgabezeile zeigt die Adresse von u (den konvertierten Zeiger auf das erste Element) und die Adresse von &u (den Zeiger auf das konvertierte Element). Zeiger). Auch hier sind diese Adressen dieselben, da u im Wesentlichen äquivalent zu &t[0] ist.

Daher schließen wir, dass der Grund dafür ist, dass die Adresse eines Arrays derselbe ist wie die Adresse des in einen Zeiger umgewandelten Arrays weil beide die Startadresse des zusammenhängenden Speicherblocks darstellen, der vom Array belegt wird. Diese Äquivalenz gilt, weil die Array-zu-Zeiger-Konvertierung einen Zeiger auf das erste Element des Arrays erzeugt, das denselben Speicherort hat wie der Anfang des gesamten Arrays.

Das obige ist der detaillierte Inhalt vonWarum entspricht die Adresse eines Arrays in C der Adresse eines Zeigers auf sein erstes Element?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn