с переменная область видимости - PullRequest
1 голос
/ 22 июня 2010

если переменная определена в блоке, присутствует ли она только в блоке или в программе? например

main()
{
    int j=5;
    {
        int i=10
        printf("%d",i);
    }
    printf("%d , %d ",i,j);
}

действительно ли

main()
{
    int j=5, *k;
    {
        int i=10
        printf("%d",i);
    }
     k=&i
    printf("%d , %d ",*k,j);
}

как переменная остается в памяти с момента ее объявления до точки выхода из функции?

Ответы [ 5 ]

11 голосов
/ 22 июня 2010

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

Рассмотрим этот глупый пример:

void doit()
{
    int *ps;
    int *pa;

    {
        static int s = 1;
        int a = 2;

        ps = &s;
        pa = &a;
    }

    // cannot access a or s here because they are out of scope
    // *ps is okay because s is static so it's lifetime is not over
    // *pa is not okay because a's lifetime ends at the end of the block
}

Ваша вторая строка printf не будет компилироваться, потому что i находится вне области действия.

1 голос
/ 22 июня 2010

Он доступен только внутри блока, поэтому в вашем примере второй printf() недопустим и не будет компилироваться.

0 голосов
/ 22 июня 2010

Область действия i ограничена в блоке, где он объявлен. В вашем случае это

{ 
    int i=10 
    printf("%d",i); 
} 

Следовательно, я не доступен за пределами этой области

0 голосов
/ 22 июня 2010

Этот вопрос также относится к вашему вопросу о локальной области действия или автоматической переменной.Область действия может быть определена как модуль, в котором определена эта переменная.

И модуль может быть функцией или файлом.

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

Если вы объявите ту же переменную, что и auto, но внутри функции, это будет означать, что к ней можно получить доступ только внутри этой функции - или еев этом случае область видимости определяется как функция.

Думайте об auto как о «локальном» внутри модуля (где модуль может быть функцией или файлом).

В приведенном выше примеревы определили область видимости, добавив фигурные скобки, и, следовательно, область действия переменной i локализуется внутри фигурных скобок, поэтому у вас ограниченный доступ за пределами фигурных скобок.

0 голосов
/ 22 июня 2010

Да, тогда его область действия ограничена блоком, в котором он расположен.

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