Heim >Backend-Entwicklung >C++ >Ist es zulässig, die Adresse eins nach dem Ende eines C-Arrays per Subskription zu erhalten?

Ist es zulässig, die Adresse eins nach dem Ende eines C-Arrays per Subskription zu erhalten?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-20 11:07:10962Durchsuche

Is Obtaining the Address One Past the End of a C   Array via Subscripting Legal?

Abfrage der Rechtmäßigkeit der One-Past-the-End-Array-Adresserfassung

Die Frage

In C kann die Adresse eines Array-Elements angegeben werden eine nach ihrem Ende durch Subskription erhalten werden, wie im folgenden Codeausschnitt gezeigt?

int array[5];
int *array_begin = &array[0];
int *array_end = &array[5];

Konkret: Ist &array[5] mit dem C-Standard kompatibel?

Die Antwort

Ja, der Code ist mit dem C-Standard kompatibel.

Erklärung

Gemäß zum C99-Standardentwurf:

§6.5.2.1, Absatz 2:

Ein Postfix-Ausdruck, gefolgt von einem Ausdruck in eckigen Klammern [], ist eine tiefgestellte Bezeichnung eines Elements eines Array-Objekts.

§6.5.3.2, Absatz 3:

Wenn der Operand [des &-Operators] das Ergebnis eines []-Operators ist, gilt weder der &-Operator noch der unäres *, das durch [] impliziert wird, wird ausgewertet und das Ergebnis ist so, als ob der &-Operator entfernt und der []-Operator in einen Operator geändert würde.

§6.5.6, Absatz 8:

Wenn der Ausdruck P auf das letzte Element eines Array-Objekts zeigt, zeigt der Ausdruck (P) 1 eins nach dem letzten Element des Arrays Objekt.

Basierend auf diesen Auszügen:

  • Der &-Operator liefert die Adresse des Operanden eines Zeigers.
  • Bei Anwendung auf das Ergebnis eines []-Operators, Der &-Operator kann entfernt werden und der []-Operator wird zu einem Operator.
  • Ein Ausdruck, der auf das letzte Element eines Arrays zeigt, kann legal auf eines verweisen über das Ende des Arrays hinaus.

Daher ist der Ausdruck &array[5] äquivalent zu *(array 5), der eins über das letzte Element des Arrays hinaus zeigt. Dies ist laut Standard zulässig, solange der Zeiger nicht dereferenziert wird.

Das obige ist der detaillierte Inhalt vonIst es zulässig, die Adresse eins nach dem Ende eines C-Arrays per Subskription zu erhalten?. 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