Probelm bei Zeigerarithmetik



  • hallo leute
    und zwar hab ich folgendes verständnis problem.

    int fi[] = { 10, 20, 30, 40, 50};
    int *pi = fi;
    cout << *(pi++); // ----> Ausgabe: 10

    mach ich jedoch *(++pi) gibt er mir 20 aus. Wieso ist das so. Klammern haben doch die höchste Priorität, dann müsste er es doch so oder so erhöhen egal wie rum es in der klammer steht.

    über eine detailierte Angabe warum das nicht so ist würde ich mcih freun.

    danke schonmal im vorraus



  • Hallo

    Das hat aber nichts mit den Klammern zu tun sondern das ++x und x++ unterschiedliche Operatoren sind

    *(pi++) : Zuerst wird pi dereferenziert, dann wird der Postinkrementor aufgerufen

    *(++pi) : Zuerst der Präinkrementor aufgerufen, dann wird pi dereferenziert.

    /Edit : Wenn du "voraus" richtig schreibst wird es auch nicht zensiert.

    Hier siehst du auch das Post-Inkrement die gleiche Priorität hat wie die Klammern, nicht wie der Prä-Inkrement.

    bis bald
    akari



  • huhu

    also dh. dass die klammern gar nicht beachtet werden?

    danke im voraus 🙂

    mfg dweb



  • also

    mich hat grad nur wie verwirrt dass bei der Prioritäten-liste vom meinem Lehrer das so aussieht:

    Prioritäennummer 1:

    Inkrement + + ++a oder a++
    Dekrement – – –a oder a––

    also bei meim Lehrer haben post und prefix wohl die gleiche Priorität.

    aber nun hab ichs verstanden.
    danke dir akari

    bis bald



  • Dweb schrieb:

    also bei meim Lehrer haben post und prefix wohl die gleiche Priorität.

    Haben sie auch. Der Unterschied liegt nicht in der Priorität sondern im Ergebnis, was geliefert wird. Das "Problem" bei C++ ist, dass es neben dem Ergebnis einer Operation auch noch einen Nebeneffekt gibt – und genau der spuckt Dir hier gewissermaßen in die Suppe (auch wenn das durchaus gewollt ist).

    Also:

    • Das Ergebnis von n++ ist n.
    • Das Ergebnis von ++n ist n + 1.
    • Der Nebeneffekt von n++ ist, dass n um eins erhöht wird.
    • Der Nebeneffekt von ++n ist, dass n um eins erhöht wird.

    Du verwechselst bei Deiner Argumentation im ersten Posting das Ergebnis mit dem Nebeneffekt.


Anmelden zum Antworten