In C (und das wurde unverändert in C++ übernommen, da ja C-Code unter C++ im Prinzip lauffähig bleiben sollte) ist der binäre Operator [] nur eine Abkürzung, sogenannter syntactic sugar, für:
array [i] == *(array + i)
Und die Additation von Pointern und Integern ist kommutativ, also gilt
Aber warum? Man kann einen int doch nicht indexieren wie einen Zeiger?
Wie pjacobi schon richtig erkärt hat, sind Arrays als Adresskonstanten und Zeiger als Adressvariablen in C und C++ lediglich "Zahlen".
Die "Indexierung" mit Klammer [ .. ] leitet ganz einfach sich aus der Konvention - u.a. aus der Assemblerindexierung ab und kam von C über C++ bis zu Dir ;-)
Beispiel: Schreibe ein Byte aus dem Register AL in den Speicher im Segment ES am Offset DI:
Zeiger in C sind demnach nichts anderes als veränderliche Adresspositionen (Zahlen), während ein "Array" eben eine unveränder- liche Adressposition (auch eine Zahl) ist (grob gesprochen).
Das geht auch ;-)
array[1] == array[1];
ist das selbe wie:
'B'-'A'[ array ] == 0[ array+1 ];
aber das hast Du inzwischen sicher schon vermutet ;-)