000
11.07.2006, 16:03 Uhr
Yadgar
|
High!
Zuweisungsoperatoren sind rechtsassoziativ... also müssten doch in diesem Programm hier:
C++: |
int main() { int i1, i2, i3; i1=i2=i3=0; i1+=3; i1*=2; (i2=i1) /= 3; cout << "i1 = " << i1 << ", i2 = " << i2 << ", i3 = " << i3 << endl; i3 = i1 /= 3; cout << "i1 = " << i1 << ", i2 = " << i2 << ", i3 = " << i3 << endl; getchar(); }
|
am Ende die drei Variablen die Werte 0, 2 und 0 haben!
Ich stellte es mir so vor: i2 wird erst auf den Wert von i1 (6) gesetzt, anschließend werden beide durch 3 geteilt, haben also den Wert 2. In der zweiten Anweisung wird i1 noch einmal durch 3 geteilt, da es vom Typ int ist, wird es 0; dieser Wert wird dann auch i3 zugewiesen, so dass die drei Variablen am Ende die Werte 0, 2 und 0 haben.
Stattdessen haben aber am Ende alle Variablen den Wert 2! Wie kann das sein? Ist die Klammer in der fünften Anweisung (also (i2=i1) /= 3) wirkungslos?
Bis bald im Khyberspace!
Yadgar -- Flagmaker - ein Programmier-Blog |