Frage zu Prä- und Postfix Inkrementierung

  • Meine frage lautet:


    Was genau ist der Unterschied zwischen z.B. "i++" und "++i" und was von beiden sollte man benutzen?


    Durch Google hab ich schon erfahren, das "++i" sofort den erhöhten Wert zurückgibt und bei "i++" noch der alte Wert zurückgegeben wird.
    Jedoch ist mir nicht so ganz klar, welche Variante jetzt was für einen Vorteil hat bzw. wieso man lieber "++i" statt "i++" benutzen sollte.


    Ich bin auf diese Frage gekommen, weil ich grad ein Bespiel aus der Schule nachprogrammiert habe (aus dem Unterricht) und ich schon von PHP her wusste,
    dass man auch "++i" statt "i++" schreiben kann.


    Als Beispiel:


    Code
    1. for (int i = 0; i <= 200; i++)
    2. {
    3. iSumme += i;
    4. // Ausgabe des aktuellen Summenwertes
    5. cout << "\nDas Ergebnis aller Zahlen von <" << i << "> bis <200> ist: [" << iSumme << "]";
    6. }


    und


    Code
    1. for (int i = 0; i <= 200; ++i)
    2. {
    3. iSumme += i;
    4. // Ausgabe des aktuellen Summenwertes
    5. cout << "\nDas Ergebnis aller Zahlen von <" << i << "> bis <200> ist: [" << iSumme << "]";
    6. }


    Bei beiden Varianten ist das Ergbenis gleich (20.100), also was genau macht den Unterschied aus?


    Danke schon mal im Voraus.


  • int i = 5;


    C
    1. prinft("%d", i++);
    2. printf("%d", i);


    Dann wäre die Ausgabe: 5, 6


    Haben wir jetzt aber:


    C
    1. prinft("%d", ++i);
    2. printf("%d", i);


    Wäre die Ausgabe: 6,6 ( i war davor wieder 5 ^^ )


    Wie man sieht wird bei i++ erst nach dem Aufruf erhöht, bei ++i vor dem Aufruf.


    Termi

  • Danke für die Erklärung, das hab ich dann verstanden.
    Aber in meinem Beispiel dürfte dann theoretisch nicht dasselbe bei beiden Schleifen rauskommen?


    Wenn z.B. i = 1, dann müsste i mit ++i ja vorher schon auf 2 gesetzt werden und somit was anderes rauskommen, als wenn man i++ benutzt.
    D.h. bei ++i müsste ja dann 20.099 rauskommen, anstatt 20.100, oder?

  • Jopp, Danke ;).
    Grade hab ich noch mal nachgeguckt und fand, dass ++i bei größeren Zahlen schneller ist?
    Naja, ich bleib einfach vorerst mal (bei der for-Schleife) bei i++, finde ich optisch schöner.
    Mit so großen Zahlen werde ich wohl sowieso erst mal nichts zu tun haben.

  • Termi, du hast das an sich richtig erklärt, aber wie Nickname09 es bereits angesprochen hat, hackt es bei den for-Schleifen. Die Syntax der for-Schleife lautet wie folgt: for(Initialisierung; Bedingung; Fortschaltung) {} So, die Fortschaltung wäre in dem Fall das i++ oder ++i. Welche Variante man bei der for-Schleifen einsetzt ist egal, denn die Fortschaltung wird erst am Ende eines Schleifendurchlaufes aufgerufen.


    Eigentlich wurde ja schon alles gesagt, i++ gibt zuerst den alten Wert zurück und inkrementiert dann und ++i inkrementiert zuerst und gibt den neuen Wert zurück. Allerdings muss ich zugeben, dass mir grad auch kein sinnvolles Beispiel einfällt.