 |
Assignment operators ('=' etc.) |
There are 11 assignment operators in C language.
The '='
operator is the simple assignment operator; the other 10
('*='
, '/='
, '%='
, '+='
, '-='
,
'<<='
, '>>='
, '&='
,
'^='
and '|='
)
are known as compound assignment operators.
All of them use the following syntax:
expr1 assignment-operator expr2
In the expression expr1 = expr2,
expr1 must be a modifiable lvalue.
The value of expr2, after conversion to the type of expr1, is
stored in the object designated by expr1 (replacing
expr1's previous value). The value of the assignment expression is the value of
expr1 after the assignment. That's why multiple assignments like
x = y = z = 10;
a = b + 2 * (c = d - 1);
are possible. Note that the assignment expression is not itself an lvalue.
For both simple and compound assignment, the operands expr1 and expr2 must obey
one of the following sets of rules:
-
expr1 is of qualified or unqualified arithmetic type and
expr2 is of arithmetic type.
-
expr1 has a qualified or unqualified version
of a structure or union type compatible with the type of expr2.
-
expr1 and expr2
are pointers to qualified or unqualified versions of compatible types,
and the type pointed to by the left has all the qualifiers of the type pointed to
by the right.
-
One of expr1 or expr1 is a pointer to an object
or incomplete type and the other is a pointer to a qualified or unqualified
version of void. The type pointed to by the left has all the qualifiers of the type
pointed to by the right.
-
expr1 is a pointer and expr2 is a null pointer constant.
The compound assignments are 'op='
, where op can be any one of
the ten operator symbols '*'
, '/'
, '%'
, '+'
,
'-'
, '<<'
, '>>'
, '&'
,
'^'
or '|'
. The expression
expr1 op= expr2
has the same effect as
expr1 = expr1 op expr2
except that the lvalue expr1 is evaluated only once. For example, expr1 += expr2 is
the same as expr1 = expr1 + expr2.