Основи програмування на С ++ для початківців

Инкремент и декремент в С

В предыдущей статье мы с вами рассмотрели бинарные операторы, которые используют для арифметических операций с двумя операндами (переменными). А в цьому уроці ми навчимося застосовувати унарні оператори, для которых необходим один операнд. Называются они инкремент ( ++ ) і декремент (). Роль этих операторов в том, чтобы изменить (увеличить или уменьшить соответственно) значение переменной на единицу, при этом значение будет перезаписано. Рассмотрим пример, в якому будемо змінювати значення змінної variable на единицу тремя различными способами:

После каждой операции в строках 11, 13 і 15. до значення змінної variable прибавляется единица. Как вы видите, найкоротша запис – это запись с использованием инкремента. Ниже, в строках 17 – 19, мы трижды применили декремент и в итоге получим значение variable уменьшенное на 3.

Компилируем:

инкремент и декремент

Оба этих унарных оператора могут иметь две формы: постфиксную ( когда оператор расположен сразу за переменной) і префиксную (оператор расположен перед переменной). У розглянутому прикладі ми застосовували постфіксні форми инкремента і декремента. Чим же відрізняються ці форми один від одного? И первая и вторая формы этих операторов выполняют одинаковые роли – збільшення або зменшення змінної на одиницю. Але якщо в рядку коду, где применяются инкремент или декремент, присутствуют еще какое-либо команды, тогда эти операторы по-разному себя ведут. Постфиксная форма будет применена после выполнения других команд. Посмотрим на следующем примере:

В результате выполнения кода строки 12, мы увидим на экране число 0. Так произойдет потому, що збільшення на одиницю виконається після виведення значення змінної variable на екран. Щоб переконатися, , что значение действительно изменилось – в строке 13 просим показать нам variable. А ось у разі застосування префиксной форми инкремента (рядок 16), переменная сразу перезапишется и уже только после этого произойдет вывод на экран. Для декремента все те ж саме, но с уменьшением на единицу.

Компилируем:

инкремент и декремент

Вот посмотрите еще на этот пример:

Результат:
инкремент и декремент

Постарайтесь понять, почему в результате операций строки 11, переменная a стала равна 10. Задавать вопросы в комментариях не запрещается.

81 думки про "Инкремент и декремент в С

  1. Як я зрозумів: спочатку компілятор обчислює ++ variable * 2 то есть (1+1)*2= 4, потім він привласнює variable = 4 і вважає ++ variable який спочатку, тобто 4 + 1 = 5, в результаті виходить: а = ++ змінна + 1 + ++змінна * 2
    а = 5 + 1 + 4
    а = 10
    правильно???

    1. Першими виконуються операції інкремента, потім множення, і, нарешті, складання.
      Подивися пріоритет операцій в С ++.

  2. setlocale(LC_ALL, “rus”);

    int variable = 1;
    int a = 0;

    a = variable + 1 + ++змінна * 2;

    а = 10
    спочатку виконується: ++variable
    INT змінна = 2
    далі вважає 2 ++variable
    після він вже int variable = 3
    а тепер математика :3+1+3*2= 10

  3. a = variable + 1 + ++variable * 2;

    1 a = variable + 1 + (++variable * 2);
    ++variable * 2 = ++ variable буде 2, потім 2 * 2 = 4

    2 a = (++variable + 1) + ++variable * 2;
    ( ++variable) + 1 = Тут ++ variable вже дорівнює 5 оскільки в першому
    5 + 1 рішенні компілятор присвоїв йому значення 4 те
    додатковий інкремент ( ++ ) збільшує його ще
    на 1, потім + цифра 1, отже 5 + 1 = 6
    3 a = (++variable + 1) + (++variable * 2); і тепер складаємо рішення 1 і 2 з ліва
    6 + 4 на право це друге рішення 6 плюс перше рішення 4 дорівнює 6 + 4 = 10

  4. У вас помилка. відповідь буде 9. Я точно не можу сказати чому, але термінал виводить відповідь 9.

    1. Undefined behaviour или вот ещё похожий случай:
      int i=5,j=5;
      i=++i+ ++i;
      Printf(“i=%i j=%i”, i, ++j + ++j); //висновок: i=14 j=13

залишити коментар

Ваша електронна адреса не буде опублікований. Обов'язкові поля позначені * *