Heim >Backend-Entwicklung >C++ >Ist es zulässig, die Adresse eins nach dem Ende eines C-Arrays per Subskription zu erhalten?
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?
Ja, der Code ist mit dem C-Standard kompatibel.
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:
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!