allg.: ++ lvalue /* Präfixnotation */ -- lvalue lvalue ++ /* Postfixnotation */ lvalue --
Aufgabe:
Präfixnotation: Inkrementierung und Dekrementierung vor Wertberechnung des Ausdruckes Postfixnotation: Inkrementierung und Dekrementierung nach Wertberechnung des Ausdruckes Nebeneffekt: Bei Inkrement- und Dekrementoperationen besteht der Haupteffekt in der Ausdrucksberechnung, während die Inkrementierung bzw. Dekrementierung des Operanden den Nebeneffekt darstellen. Oftmals jedoch ist der Nebeneffekt der eigentliche Zweck einer solchen Operation.
VERBATIM/b211: int x, y; ... x = 3; y = ++x; /* Praefixinkrementierung: x = x + 1; y = x; */ ... x = 3; y = x++; /* Postfixinkrementierung: y = x; x = x + 1; */ ... x = 3; ++x; /* ist identisch zu: x++; */
BEISPIELE/b211a.c: #include <stdio.h> main() /* Inkrement-Operatoren */ { int x , y, z; x = y = 3; z = x++ - 2; printf("x:%d y:%d z:%d\n",x,y,z); z = -x++ + ++y; printf("x:%d y:%d z:%d\n",x,y,z); z = x / ++x; /* ++ hat Vorrang vor / */ printf("x:%d y:%d z:%d\n",x,y,z); }
BEISPIELE/b211b.c: #include <stdio.h> long fakult(n) /* Berechnung von n! */ int n; { long i, fak; fak = i = 1; while (++i <= n) fak = fak * i; return(fak); /* Ergebnis an main-Funktion uebergeben */ } main() /* Argument ist Ergebnis von fakult */ { printf("10! = %d\n", fakult(10)); }
VERBATIM/b211a: int i,x; int i,x; x = 1; x = 1; i = 0; i = 0; if ( --x ) if ( x-- ) x = i++; x = i++; else else x = ++i; x = ++i;