Heim > Backend-Entwicklung > C++ > Ist „&array[5]' ein gültiger Zeiger in C über Array-Grenzen hinaus?

Ist „&array[5]' ein gültiger Zeiger in C über Array-Grenzen hinaus?

Mary-Kate Olsen
Freigeben: 2025-01-04 10:03:35
Original
362 Leute haben es durchsucht

Is `&array[5]` a Valid Pointer in C   Beyond Array Bounds?

Kann ein Array-Subskriptionspunkt über Array-Grenzen hinausgehen?

Es stellt sich die Frage, ob der folgende Code mit dem C-Standard kompatibel ist:

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

Im Einzelnen ist die Gültigkeit von &array[5] in diesem Zusammenhang unter Prüfung.

C-Standard

Gemäß dem C99-Standardentwurf:

  • §6.5.2.1, Absatz 2: „E1[E2] ist identisch mit (*((E1) (E2)))“
  • §6.5.3.2, Absatz 3 (Hervorhebung): „Wenn der Operand das Ergebnis eines []-Operators ist, gilt weder der &-Operator noch der unäre * das durch [] impliziert wird, wird ausgewertet und das Ergebnis ist so, als ob der &-Operator entfernt und der []-Operator in a geändert würde Operator.“
  • §6.5.6, Absatz 8: „Wenn der Ausdruck P um eins nach dem letzten Element eines Array-Objekts zeigt, zeigt der Ausdruck (P) 1 um eins nach dem letzten Element des Array-Objekts, und wenn der Ausdruck Q eins hinter das letzte Element eines Array-Objekts zeigt, zeigt der Ausdruck (Q) - 1 auf das letzte Element des Arrays Objekt.“

Schlussfolgerung

Diese Bestimmungen weisen darauf hin, dass:

  • Zeiger können legitimerweise auf ein Element über das Ende eines hinaus verweisen Array (ohne dereferenziert zu werden).
  • &array[5] ist äquivalent zu &*(array 5), was wiederum ist äquivalent zu (Array 5).
  • (Array 5) zeigt eins über das Ende des Arrays hinaus.
  • Da &array[5] nicht zu einer Dereferenzierung führt, ist es gemäß der zulässig C-Standard.

Das obige ist der detaillierte Inhalt vonIst „&array[5]' ein gültiger Zeiger in C über Array-Grenzen hinaus?. 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