Zuweisungs-Operator =

Der Zuweisungs-Operator speichert einen Wert in eine Variable.






5
#include <stdio.h>

int main(){
  int a;
  a = 5;
  printf("%d\n", a);
}

Details

Der Zuweisungs-Operator erwartet links einen lvalue und rechts einen rvalue und wird von rechts nach links abgearbeitet. Der Rückgabewert ist in C ein rvalue: Der Wert des linken Operanden nach der Zuweisung. in C++ ist der Rückgabewert ein lvalue: Der (mittlerweile zugewiesene) linke Operand selbst.

Handelt es sich bei den Typen der beiden Operanden um Pointer-Typen, so wird nach den Regeln der Pointer-Arithmetik vorgegangen. Handelt es sich bei den Typen der beiden Operanden um arithmetische Typen, so wird gegebenfalls eine automatische arithmetische Umwandlung vorgenommen. Entsprechen die Typen keinen der genannten Typen, so wird ein implizites Casting vorgenommen, welches gegebenfalls zu Compiler-Fehlern oder Warnungen führen kann. Warnungen sowohl von der Pointer-Arithmetik, der arithmetischen Umwandlung, als auch von impliziten Castings können mittels explizitem Casting unterdrückt werden.

Ein häufiger Fehler (insbesondere für Neulinge in der Sprache) ist, das Gleichheitszeichen des Zuweisungsoperators mit dem Gleichheits-Operator == zu verwechseln.



a = 5
int a = 7;
if(a == 6){printf("a = 6\n");}
if(a =  5){printf("a = 5\n");}

Im obigen Beispiel wird nicht, wie möglicherweise erwünscht, der Wert von a mit 5 verglichen, sondern der Wert 5 wird der Variablen a zugewiesen. Durch den Rückgabewert 5 der Variablen ist die Bedingung der if-Struktur erfüllt und die ungewollte Ausgabe wird ausgeführt.

Es ist zu beachten, dass der Zuweisungs-Operator in C einen rvalue zurückgibt und keinen lvalue. Folgendes Beispiel ergibt deswegen (nur in C) einen Fehler:


invalid lvalue in unary '&'
int a;
&(a = 5);