Hi,
i *= i++;
Don't do that ...
Es ist zwar garantiert, daß die Erhöhung durch das ++ nach dem Auslesen des Werts des rechten i geschieht, aber nicht, wann genau.
Der Interpreter geht wohl wie folgt vor:
links vom *= findet er i - da holt er schon mal den Wert (also 4)
Jetzt kommt der rechte Teil an die Reihe - der zweite Faktor ist i (also 4).
Jetzt wird das ++ ausgeführt. i ist also 5.
Jetzt werden die beiden Faktoren (4 und 4) miteinander multipliziert und das Ergebnis in i gespeichert (i ist jetzt also 16).
Grundregel: wenn in einer Expression auf eine Variable ein Prä- oder Post- In- oder De- krement Operator angewandt wird, darf dieselbe Variable im selben Ausdruck nicht noch ein weiteres Mal vorkommen.
(ist zwar syntaktisch kein Fehler, aber wie Du ja selbst gemerkt hast, sind die Effekte nicht wirklich durchschaubar - "darf nicht" ist also keine von der Programmiersprache vorgegebene Regel)
cu,
Andreas
Warum nennt sich Andreas hier MudGuard?
Schreinerei Waechter
Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.