I++ и ++i в цикле for()
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.
Вот что получились:
Для цикла
for
нет разницы между префиксным и постфиксным инкрементом (декрементом).Эти два цикла практически эквивалентны:
Разобрался, но логики пока не понял. Без цикла работает логично а в цикле по определению после тела.
эквивалентно
Если стоит постфиксный инкремент (i++), цикл выполняется в следующем порядке:
Инициализация счётчика
Проверка счётчика
Выполнение тела цикла
Инкремент счётчика
Проверка счётчика
А если префиксный инкремент (++i), в следующем:
Инициализация счётчика
Проверка счётчика
Инкремент счётчика
Выполнение тела цикла
Проверка счётчика
В первом случае сперва выполняется тело цикла, а потом изменяется значение счётчика, во втором — сперва изменяется значение, а потом выполняется тело цикла. Но в обоих случаях, к следующей проверке, значение счётчика уже изменится. Поэтому на результат работы цикла это не влияет.
Slonopotam, не сбивай человека с толка. В операторе
for
ВСЕГДА сначала выполняется тело цикла, а потом вычисляется выражение, стоящее на третьем месте в операторе (это не обязательно инкремент).Example:
Каков должен быть вывод на экран по твоей теории?
Torovich, твою схему я бы даже обобщил:
эквивалентно (без учёта оператора
continue
)По моей теории вывод на экран будет одинаковый. О чём я и написал.
Человек спросил про логику, я ему логику и объяснил. Пусть она и не верная, но однозначно логичная и не противоречит результату работы инкремента в цикле.
До этой логики я дошёл сам, когда задавался тем же вопросом, что и Torovich. Сейчас заглянул в msdn. И признаю — Да, я ошибался — «At the end of each iteration of statement.»
Слава Богу, что ты признал свою ошибку. Но я тебя таки постараюсь добить ;-) Не из садизма, а для прояснения тонкого момента.
По твоей теории выдача должна быть разной. Здесь вопрос не о том, когда циклы завершатся (а завершатся они в обоих случаях после пятой итерации), а о том, какое значение будет иметь счётчик при исполнении тела цикла. Если бы префиксный инкремент происходил до выполнения тела цикла, то выдача была бы
1 2 3 4 5
, а не0 1 2 3 4
.Добил! :-)