Операции присваивания
Выражения с операциями присваивания группируются справа налево. Операций присваивания в языке C несколько. Все они требуют, чтобы левый операнд был л_значением. Тип результата операции присваивания совпадает с типом левого операнда. Результат равен значению, которое содержится в левом операнде после выполнения присваивания. Две части составного знака операции присваивания являются отдельными лексемами.
выражение_присваивания: л_значение = выражение л_значение += выражение л_значение -= выражение л_значение *= выражение л_значение /= выражение л_значение %= выражение л_значение >>= выражение л_значение <<= выражение л_значение &= выражение л_значение ^= выражение л_значение |= выражение
При простом присваивании (=) значение выражения помещается в объект, обозначенный л_значением. Если оба операнда имеют арифметический тип, перед присваиванием правый операнд преобразуется к типу левого. Во-вторых, оба операнда могут быть структурами или объединениями одного типа. Наконец, если левый операнд является указателем, то и правый операнд, вообще говоря, должен быть указателем того же типа. Указателю, однако, может быть присвоена константа 0; этим гарантируется, что будет сформирован пустой указатель, отличный от любого указателя на объект.
Выражение вида E1 оп= E2 почти эквивалентно E1 = E1 оп (E2), однако E1 вычисляется только один раз. В выражениях += и -= левый операнд может быть указателем, в этом случае (целочисленный) правый операнд преобразуется по правилам, описанным в пункте Аддитивные операции. Все правые операнды и все левые операнды-неуказатели должны иметь арифметический тип.