Kommaoperator?



  • Hi Leute!

    Ich hab in meinem Lehrbuch folgende Codeschnipsel gefunden und verstehe nicht warum das Ergebnis so lautet. Hier seht ihr den Code:

    int i = 7, j = 4;
    
     j = (i++, i - j);
     printf("j = %i, i = %i", j, i);
    

    Laut meinem Lehrbuch hängt das Ergebnis und der Datentyp nur von der Expression2 in der Klammer ab. Das wäre ja dann 3 (weil: 7-4). Rauskommen tut aber 4... Das i++ bedeutet ja i=7; i=i+1 -> i=14. Rauskommen tut aber laut meinem printf i=8.



  • i = 7 mit i++ ist i = 8
    j = 4 mit i - j bzw. 8 - 4 ist j = 4

    liege ich falsch?



  • bandchef schrieb:

    Das i++ bedeutet ja i=7; i=i+1 -> i=14. Rauskommen tut aber laut meinem printf i=8.

    Wieso 14? ++ erhöht i um 1. 7+1 ist 8. 8-4 ist 4. Passt schon so.



  • laut lehrbuch stimmt es schon... du bist dir wahrscheinlich von einem früheren
    kapitel folgendes gewohnt:

    int b, i=2, a=3;

    b=(i++) - a;

    die werte danach sind folgender masen:

    b=-1;
    i=3;
    a=3;

    b=-1 weil: i++ erst nach der berechnung von i-a durchgeführt wird. in deinem beispiel gibt aber das komma dem i++ den vorrang und so erfolgt:

    j=8-4 weil: i++ -> i=8... und 8-4 = 4 -------> j=4!
    und i = 8...


Anmelden zum Antworten