Heim  >  Artikel  >  Backend-Entwicklung  >  Was ist der Unterschied zwischen Array-Zeiger und Zeiger-Array?

Was ist der Unterschied zwischen Array-Zeiger und Zeiger-Array?

青灯夜游
青灯夜游Original
2021-07-13 11:31:003998Durchsuche

Unterschied: Das Zeiger-Array selbst ist ein Array, und die Elemente des Arrays sind Zeiger, das heißt, das Array speichert Zeiger. Die Anzahl der vom Array belegten Bytes wird durch das Array selbst bestimmt ein Zeiger, der auf ein Array zeigt, also ein Zeiger auf ein Array ist und auf einem 32-Bit-System immer 4 Bytes belegt.

Was ist der Unterschied zwischen Array-Zeiger und Zeiger-Array?

Die Betriebsumgebung dieses Tutorials: Windows 7-System, c99-Version, Dell G3-Computer.

Ich glaube, viele C-Programmierer sind verwirrt über die Konzepte von Zeiger-Arrays und Array-Zeigern. Lassen Sie uns den Unterschied zwischen den beiden anhand zweier einfacher Anweisungen analysieren. Der Beispielcode lautet wie folgt:

int *p1[5];
int (*p2)[5];

Erstens für die Anweisung „int*p1[5]“, da „[]“ eine höhere Priorität hat als „*“. höher, also wird p1 zuerst mit „[]“ kombiniert, um die Definition eines Arrays zu bilden. Das Array heißt p1 und „int*“ ändert den Inhalt des Arrays, also jedes Element des Arrays. Das heißt, das Array enthält 5 Zeiger auf Daten vom Typ int, wie in Abbildung 1 dargestellt, es handelt sich also um ein Array von Zeigern.

Was ist der Unterschied zwischen Array-Zeiger und Zeiger-Array?

Zweitens hat „()“ für die Anweisung „int(*p2)[5]“ eine höhere Priorität als „[]“, das „*“-Zeichen und p2 stellen die Definition eines Zeigers dar und Der Name der Zeigervariablen lautet p2, und int ändert den Inhalt des Arrays, dh jedes Element des Arrays. Das heißt, p2 ist ein Zeiger, der auf ein Array zeigt, das Daten vom Typ 5 int enthält, wie in Abbildung 2 dargestellt. Offensichtlich handelt es sich um einen Array-Zeiger. Das Array hat hier keinen Namen und ist ein anonymes Array.

Was ist der Unterschied zwischen Array-Zeiger und Zeiger-Array?

Es ist ersichtlich, dass es sich bei einem Zeiger-Array zunächst um ein Array handelt und die Elemente des Arrays Zeiger sind, was bedeutet, dass das Array Zeiger und die Anzahl der vom Array belegten Bytes speichert wird durch das Array selbst bestimmt. Bei einem Array-Zeiger handelt es sich zunächst um einen Zeiger, der auf ein Array zeigt. Er belegt immer 4 Bytes in einem 32-Bit-Array. Wie viele Bytes das Array belegt, hängt natürlich von der jeweiligen Situation ab.

Nachdem Sie den Unterschied zwischen Zeiger-Arrays und Array-Zeigern verstanden haben, schauen Sie sich weiterhin den folgenden Beispielcode an:

int arr[5]={1,2,3,4,5};
int (*p1)[5] = &arr;
/*下面是错误的*/
int (*p2)[5] = arr;

Es ist nicht schwer zu erkennen, dass sich &arr im obigen Beispielcode auf die erste Adresse des gesamten Arrays bezieht, und arr ist die erste Adresse des ersten Elements des Indexarrays. Obwohl die ausgedrückten Bedeutungen unterschiedlich sind, sind die Werte zwischen den beiden gleich. Da die Werte gleich sind, stellt sich dann die Frage, warum die Anweisung „int(*p1)[5]=&arr“ korrekt ist, die Anweisung „int(*p2)[5]=arr“ jedoch unter einigen läuft Compiler? Es erscheint eine Fehlermeldung.

Tatsächlich ist der Grund sehr einfach. In der C-Sprache müssen die Datentypen auf beiden Seiten des Zuweisungssymbols „=" gleich sein. Wenn sie unterschiedlich sind, ist eine explizite oder implizite Typkonvertierung erforderlich. Hier sind p1 und p2 beide Array-Zeiger, die auf das gesamte Array zeigen. Die Datentypen auf beiden Seiten des „=“-Zeichens in der Definition von p1 sind vollständig konsistent, aber die Datentypen auf beiden Seiten des „=“-Zeichens in der Definition von p2 sind inkonsistent (der Typ links ist ein Zeiger). auf das gesamte Array, während der Datentyp auf der rechten Seite ein Zeiger auf einen einzelnen Zeichenzeiger ist), sodass eine Fehlermeldung angezeigt wird.

Verwandte Empfehlungen: „C-Sprachvideo-Tutorial

Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen Array-Zeiger und Zeiger-Array?. 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