Инкремент (i++) эта такая фиговина, которая:
увеличивает вашу переменную без регистрации и смс ©Jereli
И это круто, но не без детских грабель, а точнее следует отличать постфиксную (i++) и префиксную (++i) формы.
PS: К слову, декремент (i--), он как инкремент, только наоборот – не дает, а отбирает. Так, что и грабли у них, если не одинаковые, то бьют по одному и тому же месту.
Для наглядности рассмотрим все на примере двух задач.
Задача 1.
Даны переменная X(=5), переменная Y (=0). Выполнить для Y присвоение инкремента X.
Сценарий 1: i++ (Постфиксная форма)
Как видно из скриншота, сначала произошло присвоение для Y, а уже потом увеличение X.
Вывод: i++ сначала передает свое значение, а уже потом изменяет его.
Сценарий 2: ++i (Префиксная форма)
Как видно из скриншота, сначала произошло увеличение X, а уже потом присвоение для Y.
Вывод: ++i сначала изменяет свое значение, а уже потом передает.
Задача 2.
Даны переменная X(=5), переменная Y (=5), а также переменная результата Z(=0). Выполнить для Z сумму инкрементов X и Y.
Сценарий 1: i++ (Постфиксная форма)
Z = 10, при слагаемых X=Y=6. ИМХО, это не правильно, так что переходим ко второму сценарию.
Сценарий 2: ++i (Префиксная форма)
А тут, как и ожидалось, Z=12.
На примере таких нехитрых (по заверениям далеких от реальных условий) задач мы увидели очевидное отличие в работе постфиксной и префиксной формах инкремента.
Как говорится: "пусть за меня говорят цифры".
Отдельно стоит уточнить и такой важный технический момент - при постфиксной форме инкремента создается вспомогательный объект-копия i, потом увеличивается значение i, и уже после всего этого безобразия далее передается копия.
Что это значит? А черт его знает, я ж Неуч!
Но напрягая серое вещество, могу подчеркнуть два момента:
1. Под копию выделяется дополнительная память, т.е. ее будет нужно больше, чем при префиксной форме.
2. При вычислении будет сделано больше операций, а следовательно потребуется больше тактов процессора.
PS2: А еще есть операция присвоения «A += 2», она аналогична записи «A = A + 2», т.е. мы сами выбираем на сколько увеличить переменную (в примере на 2). В этом случае присвоение происходит по второму сценарию.