Variablenveränderung



  • Hallo liebe Forum-Mitglieder,

    warum ändert sich die Variable z nach diesem Aufruf nicht?
    x bleibt 1, da der Ausdruck ja wahr ist - dies ist mir verständlich.
    Das sich y nicht ändert ist auch klar.
    Aber warum ändert sich z nicht?
    Beim anschliessenden Ausgeben hat z ihren alten wert.

    int x = 1;
       int y = 2;
       int z = 1;
    
       x = ++x || !y && --z;
    
       printf("x: %i\n", x); 
       printf("y: %i \n", y); 
       printf("z: %i \n", z);
    

    Ich hoffe ihr könnt mir helfen.

    viele Grüße 🤡



  • Weil so ein Ausdruck nur so weit ausgewertet wird, bis das Resultat feststeht.



  • vielen Dank für Deine Antwort! Jetzt habe ich es verstanden.

    aber wenn ich

    x = ++x | !y && --z;

    schreibe -> warum ist der Ausdruck dann falsch(x=0), die sind doch immer noch mit einem oder verknüpft... weil der unterschied zu | und || ist doch, das der zweite Ausdruck ebenfalls mit ausgewertet wird bei |??!!



  • schau dir doch mal die operator precedance an



  • CMAN schrieb:

    vielen Dank für Deine Antwort! Jetzt habe ich es verstanden.

    aber wenn ich

    x = ++x | !y && --z;

    schreibe -> warum ist der Ausdruck dann falsch(x=0), die sind doch immer noch mit einem oder verknüpft... weil der unterschied zu | und || ist doch, das der zweite Ausdruck ebenfalls mit ausgewertet wird bei |??!!

    Das, was RageR meinte:
    Du könntest genausogut

    x = (++x | !y) && (--z);
    

    schreiben.



  • vielen dank für eure hilfe!
    habt mir super geholfen! danke!


Anmelden zum Antworten