Цикл for без параметров

Рейтинг: 1Ответов: 3Опубликовано: 28.10.2014
for (; ; k = p[k - 1]) {

}

Как это понимать? Как действует этот цикл?

Ответы

▲ 4Принят

Это означает, что в цикле отсутствуют операторы инициализации и проверки условия. Будет выполняться k = p[k - 1], пока цикл не прервется изнутри, например, по break.

▲ 2

Это значит, что у цикла нет условий для продолжения, а следовательно, он будет бесконечным. Ну точнее не совсем уж бесконечным - раз тело у цикла пустое, то скорее всего в нем просто вывалится исключение, но многое тут зависит от начального значения k и от содержимого p.

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

Однако в любом случае без своевременного break вывалится исключение - рано или поздно k выйдет за пределы допустимых индексов массива p. Небольшой пример

▲ 2

Обычно цикл имеет следующую структуру:

for([инициализация];[условие_выхода];[шаг])
{
    [тело_цикла]
}

В квадратных скобках указаны необязательные параметры.

Инициализация - выполняется один раз перед началом цикла. Условие - проверяется каждый раз перед началом выполнения тела цикла(код). Шаг - выполняется каждый раз после выполнения тела цикла (код).

Цикл может выглядеть и так:

for(;;);

Но полезность его стремится к нулю. Обычно, когда не указывается условие выхода, цикл становится бесконечным. Но его можно прервать, поместив в тело цикла ключевое слово break;. Так делают, когда не знают, как точно он должен прерваться, и нужна множественная проверка:

for(;;)
{
    if(...) break;
    if(...) break;

    [еще какой-то код]

}

Можно еще привести похожий while, но for читается лучше:

[инициализация]
while([условие_выхода])
{
    [тело_цикла]
    [шаг] 
}