Verbundzuweisungen in C
Einführendes Beispiel
Das folgende Beispiel zeigt, wie eine numerische Variable zunächst auf 2 gesetzt und dann mit dem Operator »+=« um 3 erhöht wird.
main.c
#include <stdio.h> int main( void )
{ int i = 2;
i += 3;
printf( "%d\n", i ); }stdout
5
Einige Anfänger glauben, daß »i + 3« in dem folgenden Programm den Wert der Variablen »i« um 3 erhöht. Doch dies ist nicht der Fall.
main.c
#include <stdio.h> int main( void )
{ int i = 2;
i + 3;
printf( "%d\n", i ); }stdout
2
Die Auswertung von »i += 3« bewirkt nun aber tatsächlich das, was mancher zu Unrecht schon von »i + 3« erwartet: Sie erhöht den Wert von »i« um 3. Da »i += 3« also Erwartungen von Anfängern erfüllt, dürfte es recht intuitiv verständlich sein.
Syntax
- vereinfachte Syntax
Ausdruck
.----------. .--. .----------.
--->| Ausdruck |--->( += )-->| Ausdruck |--->
'----------' '--' '----------'
Begriffe
Die Operatoren »=« und »+=« werden zusammenfassend als „Zuweisungsoperatoren“ beschrieben.
Typanforderungen
Dieser Operator kann auf beiden Seiten einen Operanden vom Typ »int« oder vom Typ »double« haben.
Priorität
Die Priorität des Operators »+=« ist wie die des Operators »=«.
Assoziativität
Die Zuweisungsoperatoren sind rechtsassoziativ. »a=b+=c« bedeutet also »a=(b+=c)«.
Semantik
»v += a « (mit einem beliebigen Ausdruck »a «) ist eine Abkürzung für »v = v + (a )« (abgesehen davon, daß »v« in »( v += a )« nur einmal ausgewertet wird).
Wert
Der Wert von »a+=b« ist der Wert von »a+b«.
Wirkung
Der Wert von »a+b« wird nach »a« geschrieben.
Beispiel
In dem folgenden Beispiel wird im ersten printf-Aufruf die Summe »2 + 3.9«, also »5.9« nach »i« geschrieben. Dabei werden die Nachkommastellen abgeschnitten, da »i« eine int-Variable ist. Der Wert von »i += 3.9« ist der Wert von »i« nach dieser Schreiboperation. Die folgende Anweisung zeigt, daß »i« nun tatsächlich den Wert »5« enthält.
main.c
#include <stdio.h> int main( void )
{ int i = 2;
printf( "%d\n", i += 3.9 );
printf( "%d\n", i ); }stdout
5
5
Weitere Operatoren
Auch für einige andere binäre Operatoren, sind entsprechende Kurzformen der Zuweisung definiert, so gibt es die folgenden Zuweisungsoperatoren: »+=«, »-=«, »*=«, »/=«. Für deren Priorität, Assoziativität und Semantik gilt das oben schon für »+=« Gesagte entsprechend.
Beispielsweise kann der Wert einer double-Variablen »x« durch Auswertung von »x *= 1.05« um 5 % vergrößert werden.
main.c
#include <stdio.h> int main( void )
{ double x = 100; x *= 1.05;
printf( "%g\n", x ); }
Übungsfragen
? Ausdrücke lesen
Können Sie ohne das folgende Programm zu starten, vorhersagen, was es ausgibt?
main.c
#include <stdio.h> int main( void )
{ int x = 1; int o = 2; o+=x=+o;
printf( "%d\n", o );
printf( "%d\n", x ); }