Haikson

[ Everything is possible. Everything takes time. ]

Чем отличается 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. И в итоге я выкладываю простой пример на с++, объединивший в себе все выше приведенные примеры. Код программы доступен для скачивания с моего сайта.