Чем отличается i++ от ++i

Часто начинающий программист запутывается в этих i++ и ++i. В этом небольшом посте попробуем разжевать материал так, чтобы не осталось сомнений в том, что Вы, молодой человек, никогда не запутаетесь и однозначно правильно решите какой вариант нужно использовать в конкретном случае.

Пожалуй начать нужно с определения. Оператор ++ — это сокращенное представление инкремента. Другими словами этот оператор применяют для того, чтобы к переменной прибавить 1.

i = 0;
i++; // то же самое что и i=i+1
++i; // то же самое что и i=i+1

Но почему же, и главное в каких случаях i++ != ++i ?

Дело в том что операция инкремента, как и другие операции, возвращает результат той самой операции. Важно какой результат! Разобравшись в этом больше вопросов не возникнет.

Операция инкремента I++

Данная операция возвращает значение I до того как к I прибавится 1.

int i = 0;
int j = i++;
// j == 0;
// i == 1;

Операция инкремента ++I

Данная операция возвращает I после выполнения операции сложения I+1

int i = 0;
int j = ++i;
// j = 1;
// i = 1;
// j = i;

По сути можно эту функцию разложить на другую: чуть подлиннее:

int i = 0;
i++; // или ++i;
int j = i;
// j = 1;
// i = 1;
// j = i;

Надеюсь здесь всё понятно. Теперь, для закрепления материала приведу несколько примеров.

Пример 1: цикл while

    int i = 0;

    cout << "Preincrement i" << endl;
    while (i < 10)
        cout << ++i << ' ';
    cout << endl;

    i = 0;
    cout << "Postincrement i" << endl;
    while (i < 10)
        cout << i++ << ' ';
    cout << endl;

/*
Результат работы
Preiterated i
1 2 3 4 5 6 7 8 9 10
Postiterated i
0 1 2 3 4 5 6 7 8 9
*/

Как мы видим в первом случае выводится значение i после выполнения операции сложения, а во втором случае: до.

Пример 2: цикл for

for (i = 0; i < 10; i++)
    cout << i << ' ';
cout << endl;

for (i = 0; i < 10; ++i)
    cout << i << ' ';
cout << endl;

/*
Результат выполнения операций
0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9
*/

В данном случае, по сути, ничего не меняется. Т.е. не зависимо от того, применяете Вы ++i или i++, в теле цикла мы получаем i = i+1. Поэтому над этим вообще не стоит ломать голову. Всё зависит то предпочтений программиста и никак не влияет на ход выполнения программы.

А вот следующий пример идентичен примеру 1 с циклом while:

for (i = 0; i < 10;){
    cout << i++ << ' ';
}
cout << endl;

for (i = 0; i < 10;){
    cout << ++i << ' ';
}
cout << endl;

/*
Результат выполнения операций
0 1 2 3 4 5 6 7 8 9 
1 2 3 4 5 6 7 8 9 10
*/

Подводим итоги:

Операция инкремента весьма часто используется во всех языках программирования. И то, что я приводил примеры на языке C++, по сути не меняет абсолютно ничего. В течении всей своей карьеры программиста вы ни раз примените эти знания на практике. Поэтому я очень надеюсь, что у меня получилось, всё таки, развернуто объяснить разницу между инкрементными операциями i++ и ++i.

И в итоге я выкладываю простой пример на с++, объединивший в себе все выше приведенные примеры. Код программы доступен для скачивания с моего сайта.

Kamo Petrosyan Автор

Комментарии

    Yevgeny

    (Октябрь 5, 2013 - 11:34 дп)

    Spasibo !!!

    саша

    (Октябрь 30, 2016 - 6:00 пп)

    спасибо

      Kamo Petrosyan

      (Ноябрь 11, 2016 - 8:51 дп)

      Рад, что оказался полезен.

        Аноним

        (Ноябрь 21, 2016 - 9:43 дп)

        Пример 2: цикл for
        а что, ошибку не заметили?
        1 и 5 строка аналогичньі
        for (i = 0; i < 10; i++),
        а должно в 5 бьіть
        for (i = 0; i < 10; ++i)

Добавить комментарий

Ваш e-mail не будет опубликован.