2013-03-01 3 views
2

Если я пишу что-то вроде этого:Local/статическая переменная сфера в C++

#include <iostream> 

int main() 
{ 
    using namespace std; 

    {int n;n=5;} cout<<n; 
    system("pause"); 
    return 0; 
} 

Компилятор говорит мне, что п необъявленный. Затем я попытался сделать его статическим, но опять же, компилятор говорит мне, что он не объявлен. Не изменяет ли переменная static статическая область программы? Если нет, как мне использовать n в этой программе?

+2

Возможно, из-за {int n; n = 5;}? Зачем вам нужны брекеты? – sabisabi

+2

Вы смешиваете видимость/доступность и срок службы. (Пожалуйста, выберите один из C или C++, задав этот вопрос подробно. Между ними могут быть тонкие (или не очень тонкие) различия.) – Mat

+1

@sabisabi Я хочу узнать, есть ли способ использовать n с фигурными скобками там. –

ответ

8

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

+2

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

+0

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

+1

Итак, если переменная имеет продолжительность жизни программы, почему я не могу использовать ее позже? Или как я могу использовать его за пределами блока? –

1

Как использовать n в этой программе?

using namespace std; 
int main() 
{ 
    int n;  // declare n as int 
    n=5;  // assign it a value 
    cout << n; // display it. 
    system("pause"); 
    return 0; 
} 
+1

Не отвечает на другой вопрос. И я препятствую использованию 'system()'. 'pause' также не является утилитой, найденной на всех платформах (только Win?). –

+0

Да, но я нашел способ использовать переменную за пределами скобок, в которой она объявлена. Я поставил systempause только для тестирования программ :) –

1

переменная объявлена ​​статической в ​​глобальной области имеет свой объем ограничивается блоком перевода. Переменная, объявленная static внутри функции, имеет время жизни, установленное как то же, что и программа, но в этом случае не влияет на ее область действия. Вам нужно будет поставить cout в том же объеме, что и для объявления его n.

+0

Да, но я нашел способ использовать переменную за пределами скобок, в которой она объявлена. –

3

Объем п только между кронштейнами:

{int n;n=5;} 

так вне блока, вы не имеете п переменной.

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

1

Здесь компилятор выдаст ошибку п необъявленной, потому что здесь "{Int N, N = 5;}" он объявлен в фигурных скобках. А фигурные скобки говорят нам об объеме переменной. Когда заканчивается область, переменная удаляется из памяти.

И для статических и местных.

Static: переменная такая же, как и глобальная переменная, но ее значение остается неизменным во всем приложении. И статическая переменная не может использоваться на другой странице с использованием extern.

Местные: Локальные переменные хранятся в стеке, и они удаляются, когда они получают из сферы.

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