Книга: Язык программирования Си. Издание 3-е, исправленное

A7.17. Выражения присваивания

A7.17. Выражения присваивания

Существует несколько операторов присваивания; они выполняются справа налево.

выражение-присваивания:
    условное-выражение
    унарное-выражение оператор-присваивания выражение-присваивания
оператор-присваивания: один из
    =
    *=
    /=
    %=
    +=
    -=
    <<=
    >>=
    &=
    ^=
    |=

Операторы присваивания в качестве левого операнда требуют lvalue, причем модифицируемого; это значит, что оно не может быть массивом, или иметь незавершенный тип, или быть функцией. Тип левого операнда, кроме того, не может иметь квалификатора const; и, если он является структурой или объединением, в них не должно быть элементов или подэлементов (для вложенных структур или объединений) с квалификаторами const.

Тип выражения присваивания соответствует типу его левого операнда, а значение равно значению его левого операнда после завершения присваивания.

В простом присваивании с оператором = значение выражения замещает объект, к которому обращается lvalue. При этом должно выполняться одно из следующих условий: оба операнда имеют арифметический тип (если типы операндов разные, правый операнд приводится к типу левого операнда); оба операнда есть структуры или объединения одного и того же типа; один операнд есть указатель, а другой - указатель на void; левый операнд - указатель, а правый - константное выражение со значением 0; оба операнда - указатели на функции или объекты, имеющие одинаковый тип (за исключением возможного отсутствия const или volatile у правого операнда).

Выражение E1 op= E2 эквивалентно выражению E1 = E1 op(E2) с одним исключением: E1 вычисляется только один раз.

Оглавление книги


Генерация: 0.798. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз