C ++: объем цикла for? - PullRequest
       21

C ++: объем цикла for?

1 голос
/ 04 сентября 2010
#include <iostream>
using namespace std;

int main() {
    int i;
    for(i=0; i <= 11; i+=3)
        cout << i;
    cout << endl << i << endl;
}

вывод: 0 3 6 и 9, а затем, как только он выходит из цикла, его 12. Адреса i внутри цикла и снаружи выглядят одинаково

Что мне нужно знать: является ли i внутри цикла for таким же, как i, который был инициализирован вне цикла for, потому что переменная i была инициализирована до создания циклов for, которые я когда-либо создавал?

Ответы [ 6 ]

11 голосов
/ 04 сентября 2010

Да, i внутри цикла - это то же самое, что и i вне цикла, потому что вы объявили его только один раз.

Если по какой-то причине вы хотите, чтобы он был другим (что я настоятельно рекомендуюнапротив, вы должны выбрать разные имена для разных переменных) вы можете переопределить i в цикле for:

for (int i = 0; i ...
4 голосов
/ 04 сентября 2010

Это то же самое "я", вар

#include <iostream>
using namespace std;

int i = 0;

int main() {
    int i;
    for(i=0; i <= 11; i+=3)
        cout << i;
    cout << endl << i << endl;
    cout << endl << ::i << endl;
}

я равен 12

:: я равен 0

2 голосов
/ 04 сентября 2010

Чтобы создать новый объект (переменную) в C ++ (как и в C), вы должны явно определить его. В вашей программе одно и только одно определение переменной - int i;. Это сразу означает, что есть одна и только одна переменная i. У любого другого i нет никаких шансов, независимо от каких-либо «границ цикла» или чего-либо еще.

1 голос
/ 04 сентября 2010

Здесь существует только одна переменная - и да, i внутри цикла совпадает с той, которую вы выводите после выхода из цикла.Однако переменная была инициализирована только как часть цикла, но не раньше.

1 голос
/ 04 сентября 2010

Существует только одна переменная 'i'.Вы просто присваиваете значение в цикле foor.

0 голосов
/ 04 сентября 2010

A for-loop формы:

for (init condition; expression) statement

Точно эквивалентно:

{
    init
    while (condition)
    {
        statement
        expression;
    }
}

Итак, с вашим кодом:

    int i;
    {
        i=0;
        while (i <= 11)
        {
            cout << i;
            i += 3;
        }
    }
    cout << endl << i << endl;
}

Можете ли вы сказать сейчас? Андрей формулирует это лучше всего : если вы не определили это, его не существует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...