2015-12-11 20 views
5

In With arrays, why is it the case that a[5] == 5[a]? viene esplicitato che l'operatore [] in a[5] è definito come *(a + 5) e perché + è commutativo, 5[a] significa *(5 + a) e quindi le due espressioni si riferiscono alla stessa posizione di memoria. Belle.Perché 5 [a] è valido e non genera un errore di identificatore non valido?

Tuttavia, in 6.4.2 C definisce anche che un identificatore non può iniziare con una cifra. In 5[a] l'identificatore di array è 5 che non è un identificatore valido. Perché 5[a] non genera un errore su un identificatore non valido?

risposta

10

5 non è un identificatore, è un valore letterale intero.

Lo standard C letteralmente affermare che 5[a] è solo zucchero sintattico che deve essere equivalente con *(5 + a). Non vi è alcun requisito in C che il primo operando dell'operatore + sia un identificatore, quindi il codice funziona correttamente.

6.5.6, sottolineatura mia:

Per Inoltre, sia entrambi gli operandi devono avere tipo aritmetico, o uno operando è un puntatore a un tipo di oggetto completa e l'altra avranno tipo intero.

+0

FYI: lo standard C utilizza il termine _integer constant_ (che chiarisce che non ci sono costanti (simboliche) come in altre lingue). – Olaf