Heim > Backend-Entwicklung > C++ > Ist es zulässig, die Adresse eins über das Ende eines C-Arrays hinaus zu übernehmen?

Ist es zulässig, die Adresse eins über das Ende eines C-Arrays hinaus zu übernehmen?

Susan Sarandon
Freigeben: 2024-12-26 07:18:45
Original
399 Leute haben es durchsucht

Is Taking the Address One Past the End of a C   Array Legal?

Ist es im C-Standard erlaubt, die Adresse eines Array-Elements eins über das Ende hinaus zu übernehmen?

Der folgende Codeausschnitt hat Diskussionen darüber ausgelöst seine Gültigkeit gemäß dem C-Standard:

int array[5];
int *array_begin = &array[0];
int *array_end = &array[5];
Nach dem Login kopieren

Im Einzelnen ist &array[5] hierbei ein zulässiger C-Ausdruck Kontext?

Legalität gemäß dem C-Standard

Der C-Standard definiert die Rechtmäßigkeit dieses Ausdrucks:

  • C 17-Standard 6.5.2.1, Absatz 2: Definiert E1[E2] als identisch mit (*((E1) (E2))).
  • C 17 Standard 6.5.3.2, Absatz 3: Gibt an, dass für einen []-Ausdruck der &-Operator und das implizierte * nicht ausgewertet werden, was zu & führt (E1 E2).
  • C 17 Standard 6.5.6, Absatz 8: Ermöglicht Zeiger, die auf ein Element über das Ende eines Arrays hinaus zeigen, verbieten jedoch deren Dereferenzierung.

Interpretation

Durch die Anwendung dieser Regeln auf &array[5] können wir haben:

&array[5] = &*(array + 5) = (array + 5)
Nach dem Login kopieren

Da (Array 5) eins über das Ende des Arrays zeigt und nicht dereferenziert ist, es handelt sich um einen juristischen Ausdruck nach dem C-Standard.

Vergleich mit dem C-Standard

Dieses Verhalten steht auch im Einklang mit dem C-Standard, Dies ermöglicht die Übernahme der Adresse von Elementen über das Ende eines Arrays hinaus, wiederum vorausgesetzt, dass sie nicht dereferenziert werden.

Grund für den Unterschied Behandlung

Die Entscheidung, Array 5 und &array[4] 1 unterschiedlich zu behandeln, liegt in den unterschiedlichen Zwecken dieser Ausdrücke begründet:

  • Array 5 stellt einen Zeiger nach dem dar Ende des Arrays, was Vergleiche und das Durchlaufen über die Grenzen des Arrays hinaus ermöglicht.
  • &array[4] 1 Versuche dazu Erstellen Sie einen Verweis auf ein nicht vorhandenes Element, was zu undefiniertem Verhalten führen würde.

Das obige ist der detaillierte Inhalt vonIst es zulässig, die Adresse eins über das Ende eines C-Arrays hinaus zu übernehmen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage