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 = 5

    Zeile 12 = 6
    Zeile 13 = 6

    Fü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.



  • @Newbee

    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 aund a1 jeweils vorher 5sind, sollte klar sein warum dann

    a = 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.


Anmelden zum Antworten