Главная chevron_right Структура chevron_right Составные операторы chevron_right -- (decrement)

-- (decrement)

Оператор -- уменьшает переменную на 1: постфиксная форма x-- возвращает старое значение, префиксная --x — уже новое.

Полная статья

Описание

Оператор декремента -- уменьшает значение переменной на единицу. Он работает в двух формах, которые отличаются не результатом изменения переменной, а тем, какое значение возвращается в выражении: старое или уже новое.

Синтаксис

  • x--; // decrement x by one and returns the old value of x
  • --x; // decrement x by one and returns the new value of x

Параметры

x: переменная целочисленного типа. Допустимые типы данных: int, long (в том числе беззнаковые варианты).

Возвращает

Префиксная форма (--x) возвращает новое значение переменной — то есть уже уменьшенное. Постфиксная форма (x--) возвращает старое значение — то, которое было до уменьшения. В обоих случаях сама переменная x в итоге уменьшается на 1.

Пример кода

    x = 2;
    y = --x;  // x теперь содержит 1, y содержит 1
    y = x--;  // x содержит 0, но y всё ещё содержит 1

Где применяется

  • Обратный отсчёт в цикле — например, перебор элементов массива с конца к началу.
  • Управление счётчиком событий — уменьшение числа оставшихся попыток, жизней в игре или позиций в очереди.
  • Работа с индексами — сдвиг позиции курсора или указателя на одну позицию назад.

Практические замечания

  • Разница между --x и x-- важна только тогда, когда вы используете возвращаемое значение в выражении. Если декремент стоит отдельной строкой (x--;), обе формы дают одинаковый результат.
  • Будьте осторожны с беззнаковыми типами (unsigned int, unsigned long): если переменная равна 0 и вы применяете --, она переполнится и станет максимальным значением для своего типа, а не отрицательным числом.
  • В сложных выражениях вроде a = x-- + x порядок вычисления может быть неочевидным. Лучше разбивать такие конструкции на отдельные строки — это делает код понятнее и предсказуемее.
  • Оператор -- работает только с переменными, но не с литералами и не с результатами выражений: запись вроде 5-- вызовет ошибку компиляции.

Полезные материалы