int i;
for(i = n; i --> 0;)
иВ чем разница между этими двумя циклами в C?
for(i = n; i > 0; --i)
Они производят разные результаты.
int i;
for(i = n; i --> 0;)
иВ чем разница между этими двумя циклами в C?
for(i = n; i > 0; --i)
Они производят разные результаты.
Разница заключается в шаг, в котором i
фактически уменьшается, что влияет на значения i
видели внутри тела цикла.
Вторая традиционная версия уменьшает i
после того, как тело цикла выполнено, и до того, как условие снова будет проверено. Таким образом, i
достигает 0 после того, как тело цикла выполнено для i == 1
. Условие проверяется снова и после того, как цикл i
равен 0.
Первая версия уменьшает i
до того, как тело цикла выполнено как часть проверяемого состояния. Здесь тело цикла запускается в первый раз с i == n - 1
и в последний раз с i == 0
. Затем i
уменьшается и его предыдущее значение сравнивается с 0
. Выход петли и i
составляет -1 после него.
В традиционной версии тело цикла всегда видит то же значение, с которым была проверена условная часть.
.. в цикле 'i' - это первый раз, когда' n-1' и 'i' находятся в последней итерации' 0'. И после цикла, 'i' является' -1'. –
@PaulOgilvie - Да, хороший момент. Добавлено последнее значение 'i' для обеих версий. – StoryTeller
Что касается первого, то i
декрементирован до Корпус петли выполнен. Второй уменьшает i
после выполняется тело цикла.
Я нахожу ваш ответ неполным, так как он не обсуждает поведение (значение) 'i' в сравнении. –
@PaulOgilvie хорошо, значение i в сравнении одинаково для обоих случаев. Постфиксное декрементирование означает, что COMPARISON имеет значение до декремента, но поскольку декремент теперь находится во главе цикла, значение 'i' в цикле отличается. – Roddy
@PaulOgilvie Сравнение одинаковое, оба цикла повторяют _n_ раз с теми же значениями. Единственное отличие - это значение 'i' внутри цикла. – rom1v
первый эквивалент 'for (i = n; i> 1; i -)' –
'size_t i = 42; while (i -> 0) {} ', почему бы ... – Stargateur
' for (i = n; i> 1; i -) 'дает другой результат, чем первый или второй цикл. –