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];
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:
Interpretation
Durch die Anwendung dieser Regeln auf &array[5] können wir haben:
&array[5] = &*(array + 5) = (array + 5)
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:
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!