Программирование и основы алгоритмизации. Макаров В.Л. - 86 стр.

UptoLike

Составители: 

86
кальные переменные, объявленные с ключевым словом static, известны только в
том блоке, в котором они определены. Но, в отличие от автоматических пере-
менных, локальные переменные static сохраняют свои значения в течение всего
времени выполнения программы. При каждом следующем обращении к этому
блоку локальные переменные содержат те значения, которые они имели при
предыдущем обращении.
Вернемся к уже рассмотренному выше примеру, но укажем для переменной i
статический класс:
{
static int i = 1;
...
i++;
...
}
Инициализация переменной i произойдет только один раз за время выполне-
ния программы. При первом обращении к этому блоку значение переменной i
будет равно 1. К концу выполнения блока ее значение станет равно 2. При
сле-
дующем обращении к блоку это значение сохранится и при окончании повтор-
ного выполнения блока i будет равно 3.
Таким образом, статическая переменная способна хранить информацию ме-
жду обращениями к блоку и, следовательно, может использоваться, например,
как счетчик числа обращений. Все числовые переменные статического класса
памяти принимают нулевые начальные значения, если
программист явно не
указал другие начальные значения. Статические переменныеуказатели тоже
имеют нулевые начальные значения.
Спецификации класса памяти extern используются в программах с несколь-
кими файлами. Пусть, например, в модуле Unit1 или в файле Unit1.cpp объяв-
лена глобальная переменная int a = 5; .
Тогда, если в другом модуле Unit2 или в файле
Unit2.cpp объявлена гло-
бальная переменная extern int a;, то компилятор понимает, что речь идет об
одной и той же переменной. И оба модуля могут с ней работать. Для этого даже
нет необходимости связывать эти модули директивой #include, включающей в
модуль Unit1 заголовочный файл второго модуля.
Таким образом, область действия идентификатораэто часть
програм-
мы, в которой на идентификатор можно ссылаться. Например, на локальную пе-
ременную, объявленную в блоке, можно ссылаться только в этом блоке или в
блоке, вложенном в этот блок. Существует четыре области действия идентифи-
каторафункция, файл, блок и прототип функции.
Идентификатор, объявленный вне любой функции (на внешнем уровне),
имеет
область действия файл. Такой идентификатор известен всем функциям.