Priotitätsproblem



  • Ich hab ein Problem mit der Priorität des Postfixinkrement-Operator. Hier ein Beispiel dazu:

    int main()
    {
        int zahl[3] = {10,34,8};
        int *p = zahl;
        *p++ = 23; // !!!
        //p wurde 1 Feld erhöt. Befindet sich nun auf p[1]
    
        --p;
    
        for(size_t i = 0; i<3; ++i)
        {
            cout << p[i] << endl;
        }
    
        return 0;
    }
    

    Ich verstehe die stelle

    int *p++ = 23
    

    nicht. Meiner Meinung nach wird erst inkrementiert und dann dereferenziert, also:

    p++;
    *p = 23;
    

    Also wäre p[1] = 23. Dem ist aber nicht so, p[0] = 23....und genau dass verstehe ich nicht. Der Postfixinkrement-Operator hat doch eine höhere Priorität als der Dereferenzierungsoperator "*"?
    Aber trotzdem passiert hier folgendes:

    *P = 23;
    p++;
    

    Also genau andersrum. Warum? In meinem C++ Buch ist in der "Prioritäten Tabelle der Operatoren" Postfixinkrement auf Platz 9 und Dereferenzierung auf Platz 22.
    Ich verstehe es nicht.

    MfG
    Stromberg



  • Beschäftigeste dich jetzt mit Pointern und Arrays 🙂 .

    *++p = 23;
    


  • *++p = 23;
    

    was ist damit? Hier benutzt du doch jetzt den Präfiinkrement oder?

    MfG
    Stromberg



  • Der Postfixinkrement Operator inkrementiert den Wert und gibt den alten zurück, der Präfix Operator inkrementiert den Wert und gibt den neuen zurück.



  • Stromberg schrieb:

    Ich verstehe die stelle

    int *p++ = 23
    

    nicht. Meiner Meinung nach wird erst inkrementiert und dann dereferenziert

    Wird auch. Du kennst doch den Post-++-Operator, der erhöht und gibt eine nicht-erhöhte Kopie zurück. "p" wird also als erstes um eins erhöht, wegen Post-++ wird eine Kopie des "originalen" Zeigers zurückgegeben, diese Kopie dereferenziert und zugewiesen.


Anmelden zum Antworten