Können Sie die Adresse eines Array-Elements eins über das Ende hinaus übernehmen?
Der folgende Code war Gegenstand von Debatten in der Programmierung community:
int array[5]; int *array_begin = &array[0]; int *array_end = &array[5];
Konkret ging es in diesem Zusammenhang um die Frage, ob &array[5] legaler C-Code ist angehoben.
Die Haltung des C-Standards
Gemäß dem C-Standard, insbesondere:
Auswirkungen für &array[5]
Anwenden dieser Regeln auf &array[5], wir haben:
Ist es legal?
Ja, das ist es ist legal. Der Standard erlaubt ausdrücklich, dass Zeiger auf ein Element über das Ende eines Arrays hinaus zeigen, sofern sie nicht dereferenziert werden. In diesem Fall wird &array[5] nur zum Abrufen einer Adresse verwendet, nicht zum Zugriff auf den Wert an dieser Adresse. Es liegt also innerhalb der Grenzen dessen, was der Standard zulässt.
Warum der Unterschied zu Array 5 oder &array[4] 1?
Das Verhalten von &array[5] unterscheidet sich von Array 5 oder &array[4] 1 aufgrund auf den Vorrang der und []-Operatoren in Kombination mit dem Verhalten des durch [] implizierten unären *-Operators. Konkret:
Im Gegensatz dazu wird &array[5] so ausgewertet, als ob der &-Operator entfernt und der []-Operator in einen Operator geändert würde, was zu Array 5 führt, jedoch ohne die Auswertung des unärer *-Operator.
Das obige ist der detaillierte Inhalt vonIst es in C zulässig, die Adresse eines Array-Elements eins über das Ende hinaus zu übernehmen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!