[C] Unerwünschter Nebeneffekt bei Ausgabe

Atomique schrieb:
das heißt, dass der wert aufgesucht wird praktisch und dann addiert mit 1

Genau.

Atomique schrieb:
.. was passiert bei: (*xPtr)++;? da gibt es doch einen unterschied oder?

Einen kleinen aber feinen. :)

++i nennt sich Präinkrement. i++ hingegen ist als Postinkrement bekannt. Beide erhöhen den Wert von i um eins. Der Unterschied liegt in dem Rückgabewert. Folgendes Beispiel:

Code:
int a = 3;
const int b = ++a; // <-- hiernach hat b den Wert 4

int c = 3;
const int d = c++; // <-- hiernach hat d den Wert 3

Also ... Präinkrement liefert den Wert des Operanden NACH dem Erhöhen; Postinkrement liefert den Wert des Operanden VORM Erhöhen.

Das ist auch der Grund, weshalb man, wenn einen der Rückgabewert eh nicht interessiert, eigentlich korrekterweise immer den Präinkrement verwenden sollte, also ++i statt i++.
 
Nein, d erhält überhaupt nicht den Wert 4 sondern 3. Zu Veranschaulichung hier mal eine Funktion, die praktisch das gleiche tut wie der Postinkrementoperator.

Code:
int postIncrement( int* pointerToValue )
{
    const int oldValue = *pointerToValue;
    *pointerToValue = *pointerToValue + 1;

    return oldValue;
}

Macht's klick? :)
 

Ähnliche Themen

Zurück
Oben