Warum ist array[int] das selbe wie int[array]?

Hallo zusammen,

bei der Wiederholung meiner Programmieren-Vorlesung bin ich auf ein Beispiel zu Pointern und Arrays gestoßen, das ich mir nicht erklären kann. Hier ein Minimalcode:

#include <iostream>
using namespace std;

int main() {
    int a[5] = {0, 10, 20, 30, 40};
    int n=2;
  
    cout << a[n] << endl;
    cout << n[a] << endl;
}

Beide Ausgaben liefern den Wert des Arrays an der Stelle 2, d.h. die Zahl 20. Im ersten Fall ist das natürlich vollkommen klar, aber kann jemand die zweite Ausgabe erklären? Dazu müsste man denke ich wissen, wie genau die eckigen Klammern eigentlich arbeiten.

Vielen Dank für jegliche Antworten!

Hi,

vollkommen richtig. Was denkst du denn, wie die arbeiten?

Laut C++ Standard, den ich nachfolgend zitiere, gilt, sofern [] nicht überladen ist:

the subscript operator [ ] is interpreted in such a way that E1[E2] is identical to *((E1)+(E2)). Because of the conversion rules that apply to +, if E1 is an array and E2 an integer, then E1[E2] refers to the E2-th member of E1. Therefore, despite its asymmetric appearance, subscripting is a commutative operation.

Bei den genannten Regeln für + handelt es sich um die Tatsache, dass

a + n

umgewandelt wird in „a + sizeof(elementtyp)*n“, wenn a ein Array oder Pointer und n ein int ist.

Gruss
K.

Perfekt!

Ich sollte mir angewöhnen, solche Probleme immer auf Englisch zu googlen :smile:

Vielen vielen Dank für die schnelle Lösung und einen schönen Abend!