Zuweisung neuer Werte (blutiger Anfänger)
-
Aloah!
Ich fange gerade an nach einem Buch C++ zu lernen. Ich habe exakt 0 Vorkenntnisse und weiß, dass Java da eher Sinn macht, aber C++ sieht auf den ersten Blick logischer aus. Dennoch verstehe ich folgendes Beispiel nicht:
#include <iostream> int main () { int a = 5, b, a1 = 5, b1; b = a++; std::cout << "a: " << a << std::endl; std::cout << "b: " << b << std::endl; b1 = ++a1; std::cout << "a1: " << a1 << std::endl; std::cout << "b1: " << b1 << std::endl; }
Im Buch steht "Wenn die Pluszeichen dem Variablennamen nachgestellt sind, findet die Erhöhung erst nach der Zuweisung statt.". Und bei ++a wird zuerst erhöht und danach zugewiesen.
Die Lösungen sind:
Zeile 8 = 6
Zeile 9 = 5Zeile 12 = 6
Zeile 13 = 6Für mich ist nur Zeile 13 logisch. Hier meine Denkweise:
In den Zeilen 7 und 11 werden jeweils b bzw. b1 definiert. Das IST ja schon die Zuweisung, oder? Das "cout" ist ja nur eine Ausgabe und keine Zuweisung?! Demnach müsste ja sowohl in Zeile 9 als auch in Zeile 13 die Zahl 6 stehen.
Weiters verstehe ich nicht wieso in Zeile 8 bzw. 12 bereits die Zahl 6 erscheint. Ich habe ja nirgendwo a bzw. a1 neu difiniert. Ich habe ja lediglich b dahingehend definiert, dass a um eins erhöht wird.
Ich hoffe, ihr könnt mir das verständlich machen.
-
@Newbee Die Variablen werden in Zeile 5 definiert und teilweise initialisiert.
Zeile 7 ist eine Zuweisung: b erhält den Wert von a (also 5). Danach wird a um 1 erhöht, also ist a dann 6.
-
Weiters verstehe ich nicht wieso in Zeile 8 bzw. 12 bereits die Zahl 6 erscheint. Ich habe ja nirgendwo a bzw. a1 neu difiniert.
Beide ++ Varianten beinhalten
a=a+1
.
-
Damit komme ich nur bedingt weiter. Wenn b in Zeile 7 zugewiesen wird ....
"Wenn die Pluszeichen dem Variablennamen nachgestellt sind, findet die Erhöhung erst nach der Zuweisung statt."Soweit ich das jetzt verstanden habe:
Zeile 7: b ist noch 5, da es NACH dieser Zuweisung zu 6 wird. Aber wann wird b (nicht b1) dann nun zu 6? Wann wird da b = 6 ausgegeben?Zeile 11: die Erhöhung findet postum VOR der Zuweisung in dieser Zeile statt (wird quasi zwischengeschoben) und daher kommt bei b1 die Zahl 6 raus.
Und was ich immer noch nicht verstehe ist, wieso a in Zeile 8 gleich 6 ist.
-
@Newbee sagte in Zuweisung neuer Werte (blutiger Anfänger):
b = a++;
Du kannst dir das als zwei Anweisungen vorstellen (bzw. im Maschinencode ist das dann auch so):
b = a; a = a + 1;
Und bei
@Newbee sagte in Zuweisung neuer Werte (blutiger Anfänger):b1 = ++a1;
entspricht dies
a1 = a1 + 1; b1 = a1;
Und da
a
unda1
jeweils vorher5
sind, sollte klar sein warum danna = 6; b = 5;
sowie
a1 = 6; b1 = 6;
sind (welche dann mittels
cout
auch so ausgegeben werden).
-
@Newbee sagte in Zuweisung neuer Werte (blutiger Anfänger):
Zeile 7: b ist noch 5, da es NACH dieser Zuweisung zu 6 wird.
a hat das ++. Daher wird auch a verändert.
-
Das Post- und Preinkrement steht nur selten in einer Zuweisung.
Meist wird es als Index oder Schleifenzähler gebraucht.