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 genausogutx = (++x | !y) && (--z);
schreiben.
-
vielen dank für eure hilfe!
habt mir super geholfen! danke!