2017-01-25 5 views
-4
int i; 
for(i = n; i --> 0;) 

иВ чем разница между этими двумя циклами в C?

for(i = n; i > 0; --i) 

Они производят разные результаты.

+0

первый эквивалент 'for (i = n; i> 1; i -)' –

+0

'size_t i = 42; while (i -> 0) {} ', почему бы ... – Stargateur

+0

' for (i = n; i> 1; i -) 'дает другой результат, чем первый или второй цикл. –

ответ

2

Разница заключается в шаг, в котором i фактически уменьшается, что влияет на значения i видели внутри тела цикла.

Вторая традиционная версия уменьшает i после того, как тело цикла выполнено, и до того, как условие снова будет проверено. Таким образом, i достигает 0 после того, как тело цикла выполнено для i == 1. Условие проверяется снова и после того, как цикл i равен 0.

Первая версия уменьшает i до того, как тело цикла выполнено как часть проверяемого состояния. Здесь тело цикла запускается в первый раз с i == n - 1 и в последний раз с i == 0. Затем i уменьшается и его предыдущее значение сравнивается с 0. Выход петли и i составляет -1 после него.

В традиционной версии тело цикла всегда видит то же значение, с которым была проверена условная часть.

+1

.. в цикле 'i' - это первый раз, когда' n-1' и 'i' находятся в последней итерации' 0'. И после цикла, 'i' является' -1'. –

+0

@PaulOgilvie - Да, хороший момент. Добавлено последнее значение 'i' для обеих версий. – StoryTeller

3

Что касается первого, то i декрементирован до Корпус петли выполнен. Второй уменьшает iпосле выполняется тело цикла.

+0

Я нахожу ваш ответ неполным, так как он не обсуждает поведение (значение) 'i' в сравнении. –

+0

@PaulOgilvie хорошо, значение i в сравнении одинаково для обоих случаев. Постфиксное декрементирование означает, что COMPARISON имеет значение до декремента, но поскольку декремент теперь находится во главе цикла, значение 'i' в цикле отличается. – Roddy

+0

@PaulOgilvie Сравнение одинаковое, оба цикла повторяют _n_ раз с теми же значениями. Единственное отличие - это значение 'i' внутри цикла. – rom1v

Смежные вопросы