2014-01-13 3 views
2

Итак, вот вопрос: могу ли я увеличиваем переменную i внутри for цикла ?:Приращение внутренней переменной счетчика внутри цикла для

for(int i = 0; i < 1000; i++) 
{ 
    i++; // is this legal? if not what is the alternative? 
} 
+5

Это совершенно законно. Ты это пробовал? – Baldrick

+0

Да, это как-то не работает, может быть, я делаю что-то неправильно ... Но цель вопроса состояла в том, чтобы спросить, действительно ли это хорошая практика, если это возможно. –

+4

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

ответ

4

Абсолютно легальные, но не очень интуитивным.

Рассмотрите возможность использования цикла while вместо этого, если вам нужно манипулировать своим циклом таким образом (это просто явная вещь кода, а не юридическая вещь).

3

Если мы посмотрим на проект стандарта C99 он говорит следующее о для петли в разделе 6.8.5.3для постановки:

Изложение

для (п-1; выражение -2; выражение-3)

ведет себя следующим образом: выражение expression-2 является управляющим выражением, которое оценивается . для каждого выполнения тела цикла. Выражение-выражение оценивается как выражение void после каждого выполнения тела цикла. Если предложение-1 является объявлением , область любых объявляемых им идентификаторов - это остальная часть декларации и весь цикл, включая два других выражения; это достигается в порядке выполнения перед первой оценкой управляющего выражения. Если выражение-1 является выражением, оно равно , которое оценивается как выражение void перед первой оценкой управляющего выражения. 137)

Так что, если мы разбираем этот текст вашего для цикла будет примерно эквивалентно следующему:

{ 
    int i = 0 ; // clause 1 
    while(i < 1000) //expression 2 
    { 
     i++ ; // statement 

     i++ ; // expression 3 
    }  
} 

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

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