Операция присваивания
Имеется ряд операций присваивания, каждая из которых группируется слева направо. Все операции требуют в качестве своего левого операнда L-значение, а типом выражения присваивания является тип его левого операнда. Значением выражения присваивания является значение, хранимое в левом операнде после того, как присваивание уже будет произведено. Две части составной операции присваивания являются отдельными лексемами.
Выражение-присваивания:
- L-значение = выражение
- L-значение += выражение
- L-значение -= выражение
- L-значение *= выражение
- L-значение /= выражение
- L-значение %= выражение
- L-значение >>= выражение
- L-значение <<= выражение
- L-значение &= выражение
- L-значение ^= выражение
- L-значение |= выражение
Когда производится простое присваивание C '=', значение выражения заменяет значение объекта, на которое ссылается L-значение. Если оба операнда имеют арифметический тип, то перед присваиванием правый операнд преобразуется к типу левого операнда.
О свойствах выражения вида e1 оп = e2, где oп - одна из перечисленных выше операций, можно сделать вывод, если учесть, что оно эквивалентно выражению e1 = e1 оп (e2); однако выражение e1 вычисляется только один раз. В случае операций += и -= левый операнд может быть указателем, причем при этом (целочисленный) правый операнд преобразуется таким образом, как объяснено далее; все правые операнды и все отличные от указателей левые операнды должны иметь арифметический тип.
Используемые в настоящее время компиляторы допускают присваивание указателя целому, целого указателю и указателя указателю другого типа. такое присваивание является чистым копированием без каких-либо преобразований. Такое употребление операций присваивания является непереносимым и может приводить к указателям, которые при использовании вызывают ошибки адресации. Тем не менее гарантируется, что присваивание указателю константы 0 дает нулевой указатель, который можно отличать от указателя на любой объект.