# Assignment Operators

*Go Up to Binary Operators Index*

**Syntax**

unary-expression assignment-op assignment-expression

**Remarks**

The assignment operators are:

`= *= /= %= += -=`

`<<= >>= &= ^= |=`

The **=** operator is the only simple assignment operator, the others are compound assignment operators.

In the expression `E1 = E2`

, `E1`

must be a modifiable lvalue. The assignment expression itself is not an lvalue.

The expression

`E1 op= E2`

has the same effect as

`E1 = E1 op E2`

except the lvalue `E1`

is evaluated only once. For example, `E1 += E2`

is the same as `E1 = E1 + E2`

.

The expression's value is `E1`

after the expression evaluates.

For both simple and compound assignment, the operands `E1`

and `E2`

must obey one of the following rules:

`E1`

is a qualified or unqualified arithmetic type and`E2`

is an arithmetic type.`E1`

has a qualified or unqualified version of a structure or union type compatible with the type of`E2`

.`E1`

and`E2`

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.- Either
`E1`

or`E2`

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. `E1`

is a pointer and`E2`

is a null pointer constant.

Note:Spaces separating compound operators (`+`

<space>`=`

) will generate errors.

Note:There are certain conditions where assignment operators are not supported when used with properties.