C Inkrement - Aufgabe

ronan191

Lieutenant
Registriert
Feb. 2008
Beiträge
585
Hallo!

Bei der folgenden Aufgabe bin ich mir etwas unsicher und würde mich freuen, wenn jemand mir da weiterhelfen könnte :rolleyes:

int b=19;
int c;

c = b++

-------------------------------

Da b++ nichts weiter als b=b+1 ist, habe ich b=19+1 -> b=20 gerechnet.
c = b++ -> c=b=20 ???

Kann das richtig sein?
 
c = b++;

c = 19
b = 20;


c = ++b

c = 20
b = 20

Und wieso nicht einfach ausprobieren? Ist doch ne Sache von paar Sekunden...
 
Seh ich genauso wie amokkx.

Gib doch am Ende einfach folgendes ein.

Code:
printf ("Der Inhalt für Integer b lautet %d.\n", b,);

Dann müsste dort 20 erscheinen.
 
Hast recht mit dem Ausprobieren. Habe es sogar gemacht, jedoch kam durch einen von mir übersehenen Fehler was komisches raus.

Nach Eingabe in den Compiler habe ich aber nun exakt dasselbe raus. Vielen Dank für die schnelle Hilfe!
Ergänzung ()

@ Frader

Der Compiler gibt amokkx aber recht ;-)

Edit: Ok du hast dich korrigiert :-)
 
Jep :-) Hab mich da vertippt :-)
 
da es sich hier um den postinkrement-operator handelt, wird 19 ausgegeben.

der unterschied zwischen ++b und b++ ist, dass der ausdruck ++b b+1 zurückgibt, während b++ b zurückgibt. in beiden fällen ist danach b um eins erhöht.

++b ist übrigens effizienter als b++, da bei b++ erst eine kopie von b angelegt werden muss, dann b erhöht, und dann die kopie zurückgegeben wird. bei ++b wird einfach b erhöht und dann zurückgegeben.
 
Auch dir vielen Dank für die leicht verständliche Ausführung!
 
maxwell-cs schrieb:
++b ist übrigens effizienter als b++, da bei b++ erst eine kopie von b angelegt werden muss, dann b erhöht, und dann die kopie zurückgegeben wird. bei ++b wird einfach b erhöht und dann zurückgegeben.
Jetzt erzähl mir nicht, aktuelle Compiler könnten das nicht optimieren.
 
asdfman schrieb:
Jetzt erzähl mir nicht, aktuelle Compiler könnten das nicht optimieren.

Hat er ja nicht behauptet, oder? Aber warum nicht das programmieren, was man wirklich meint, und nicht das, was man hofft, das der Compiler draus macht? Im übrigen mag der Compiler zwar in der Lage sein, Postinkrement für built-in types wegzuoptimieren, aber bei benutzerdefinierten Typen wär ich mir da nicht so sicher.
 
antred schrieb:
Im übrigen mag der Compiler zwar in der Lage sein, Postinkrement für built-in types wegzuoptimieren, aber bei benutzerdefinierten Typen wär ich mir da nicht so sicher.
Ein C-Compiler wird bei ++ auf benutzerdefinierte Typen einen Fehler ausgeben. :D
 
Stimmt. Sorry, ich war in Gedanken schon wieder in C++-Land. :o
 
Zurück
Oben