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