Der folgende Code hat mich verwirrt
int a=2,b=5,c;
c=a+++b;
printf("%d,%d,%d",a,b,c);
Ich erwartete eine Ausgabe von 3,5,8, hauptsächlich weil a ++ 2 + 1 bedeutet, was 3 und 3 + 5 = 8 ist. Es stellt sich heraus, dass das Ergebnis 3,5,7 ist. Kann jemand erklären, warum dies der Fall ist?
Es wird als c = a++ + b
analysiert und a++
bedeutet Nachinkrement, d. H. Inkrement, nachdem der Wert von a
zur Berechnung von a + b == 2 + 5
genommen wurde.
Bitte, niemals schreibe Code so.
Maximale Munch-Regel gilt für solche Ausdrücke, nach denen der Ausdruck wie folgt analysiert wird:
c = a++ + b;
Das heißt, a
wird nach inkrementiert (a++
) und somit wird der aktuelle Wert von a
(vor Nachinkrement) für die +
-Operation mit b
verwendet.
a ++ ist post inkrementierend, d. h. der Ausdruck nimmt den Wert von a an und addiert dann 1.
c = ++ a + b würde tun, was Sie erwarten.
Dies ist ein Beispiel für einen schlechten Programmierstil.
Es ist ziemlich unlesbar, es wird jedoch a
nachgestellt, so dass der aktuelle Wert von a
zu b
summiert und danach a
inkrementiert wird!
Entsprechend der Longest Match Regel wird es während der lexikalischen Analysephase des Compilers als +++ + b analysiert. Daher die resultierende Ausgabe.
a ++ wird nach dem Ausdruck ausgewertet.
c = ++ a + b; würde dir geben, was du gedacht hast.
Der Nach-Inkrement-Operator a ++ ändert den Wert von a, nachdem der Wert von a im Ausdruck ausgewertet wird. Da der ursprüngliche Wert von a 2 ist, wird dies zur Berechnung von c verwendet. Der Wert von a wird geändert, um den neuen Wert wiederzugeben, nachdem das ++ ausgewertet wurde.
a ++ + b ..it gibt das Ergebnis 7 an und nachdem der Ausdruckswert von a wegen des Nachinkrementierungsoperators auf 3 aktualisiert wurde
Hier c = a +++ b; bedeutet c = (a ++) + b; Inkremente werden in dem nächsten Schritt, in dem a, b und c gedruckt wird, geändert. In ++ a, d. H. Präfix-Inkrement, werden die Änderungen in demselben Schritt vorgenommen und es wird eine Ausgabe von 8 ausgegeben.