In With arrays, why is it the case that a[5] == 5[a]? wird erläutert, dass die []
Operator in a[5]
als *(a + 5)
definiert ist und weil +
kommutativ ist, bedeutet 5[a]
*(5 + a)
und so die beiden Ausdrücke auf die gleiche Speicherstelle beziehen. Fein.Warum ist 5 [a] gültig und erzeugt keinen Fehler der ungültigen Kennung?
Allerdings definiert C in 6.4.2.1 auch, dass ein Bezeichner nicht mit einer Ziffer beginnen darf. In 5[a]
ist die Array-ID 5
, die keine gültige Kennung ist. Warum generiert 5[a]
keinen Fehler über einen ungültigen Bezeichner?
FYI: Der C-Standard verwendet den Begriff _integer constant_ (was klarstellt, gibt es keine (symbolischen) Konstanten wie in anderen Sprachen). – Olaf