wake-up-neo.net

Was bedeutet die Operation c = a +++ b?

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?

31
user595985

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.

90
Fred Foo

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.

39
Nawaz

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.

6
David

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!

2
Stefano

Entsprechend der Longest Match Regel wird es während der lexikalischen Analysephase des Compilers als +++ + b analysiert. Daher die resultierende Ausgabe.

1
Vineet G

a ++ wird nach dem Ausdruck ausgewertet.

c = ++ a + b; würde dir geben, was du gedacht hast.

1
jrok

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.

1
Patrick87

a ++ + b ..it gibt das Ergebnis 7 an und nachdem der Ausdruckswert von a wegen des Nachinkrementierungsoperators auf 3 aktualisiert wurde

1
Aman Agarwal

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.

0
Alok Negi