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: 10mach 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 akaribis 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.