Объясните объем индексов цикла

Я просто хочу подтвердить подозрение, что у меня есть индексы цикла. Я использую c++. В моем коде у меня два цикла. Для одного я объявил свой индекс за пределами цикла, т.е.

int i;
for(i = 0; i < n; i++){
. . .
}
cout << i <
<p> И потом я потом:</p> <pre class="prettyprint linenums">for(int j = 0; j</pre><code> <p> В первом случае я вижу, что выводится случайное число. Во втором случае я получаю сообщение об ошибке -fpermissive или что-то в этом роде. Я просто хочу подтвердить, что индекс выходит за пределы области, когда цикл заканчивается, потому что это похоже на то, что происходит. Я пытался использовать индекс для чего-то позже, я думаю, мне просто нужно добавить второй индекс в цикле, чтобы увеличить его, как я или j, а затем я могу использовать это значение позже. то есть:</p> <pre class="prettyprint linenums"> int index = 0; for(int j = 0; j</pre><code> <p> Кто-нибудь подтвердит это для меня?</p>
3 ответа

Первый пример :: http://codepad.org/L5VErMAh

int main( void )
{ int i, n = 10 ; for(i = 0; i < n; i++){ // do something useful. . . } cout << i <
<p> Выход :: <code>10 Пояснение :: Объем i и n является global для цикла for. Таким образом, они не становятся недействительными или неопределенными после выполнения цикла for.

Второй пример :: http://codepad.org/iqNtQ1Ok

int main( void )
{ int n = 10 ; for(int j = 0; j < n; j++){ // do something useful. . . } cout << j <
<p> Результат: <code>name lookup of 'j' changed for new ISO 'for' scoping

Объяснение :: Объем n является global для цикла for но по мере того, как j объявляется внутри цикла for, его область действия и время жизни являются local для цикла for. Это означает, что j будет и уничтожен после выполнения цикла for. Вот почему, ошибка.

Третий пример: я думаю, вы, должно быть, поняли, что он такой же, как в первом примере.

Теперь для вашего сомнения: " In the first case я see that some random number is outputted. Нет, это не может произойти, если вы не делаете что-то неправильно внутри цикла for. Вы можете опубликовать первый случай for кода цикла, и мы можем указать вам на ошибку.


В первом случае, поскольку j объявлен вне цикла, область я является даже внешней частью цикла. Так,

cout<
<p> печатает значение <code>n. Второй случай, j объявляется в цикле. Таким образом, область j находится только внутри цикла; Таким образом, вы получаете ошибку.

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

#include<stdio.h>
main()
{ int i; for(i=0;i<5;i++) printf("%d\n",i); return 0;
}
</stdio.h>

дал мне результат 5.


хорошо это будет просто печатать n

int i;
for(i = 0; i < n; i++){
//...
}
cout << i <
<p> и этот J объявлен вне сферы действия</p> <pre class="prettyprint linenums">for(int j = 0; j</pre><code> <p> и последний делает то же самое, что и первый</p> <pre class="prettyprint linenums"> int index = 0; for(int j = 0; j</pre><code>

licensed under cc by-sa 3.0 with attribution.