Frage zu seltsamem Indexoperator



  • Hallo, ich habe folgenden Code gefunden:

    char c = 0["abc"];
    std::cout<<c; //ausgabe a
    

    Wie funktioniert das? Versteht mich nicht falsch, ich kann durchaus mit (C-)arrays und index operatoren umgehen, aber was genau geschieht in dem Beispiel? Ich hätte den Code so geschrieben:

    char c = "abc"[0];
    

    Wie kann denn ein "const char ponter" als "index" fungieren? und wieso ist die 0 davor syntaktisch erlaubt?



  • Steht halt im Standard so drin:

    ISO/IEC 14882:2003 5.2.1 (1) schrieb:

    A postfix expression followed by an expression in square brackets is a postfix expression. One of the expressions shall have the type “pointer to T” and the other shall have enumeration or integral type. The result is an lvalue of type “T.” The type “T” shall be a completely-defined object type. *The expression E1[E2] is identical (by definition) to ((E1)+(E2)). [Note: see 5.3 and 5.7 for details of * and + and 8.3.4 for details of arrays. ]

    (Hervorhebung von mir)

    "abc"[0] und 0["abc"] machen also genau das selbe.



  • Der []-operator addiert nur eine Addresse.
    Deshalb ist a[b] und b[a] dasselbe.



  • ist das auch bei
    a[2][4]
    und
    4[2][a]
    so?


  • Mod

    bubble 3566 schrieb:

    ist das auch bei
    a[2][4]
    und
    4[2][a]
    so?

    Rechne es doch aus! Addieren wirst du doch wohl noch können.



  • bubble 3566 schrieb:

    ist das auch bei
    a[2][4]
    so?

    2[a][4],
    4[a[2]],
    4[2[a]]

    ( alles äquivalent zu a[2][4] )

    und 4[2][a] kompiliert genauso wenig wie (*(4+2))[a]


Anmelden zum Antworten