Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование / WORD / Лекции по ЯП (часть 3).doc
Скачиваний:
138
Добавлен:
15.04.2015
Размер:
1.34 Mб
Скачать

Область действия и область видимости

Область действия переменной – это правила, которые устанавливают, какие данные доступны из данного места программы.

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

С точки зрения области действия переменных различают три типа переменных:

  • глобальные,

  • локальные

  • формальные параметры.

Правила области действия определяют, где каждая из них может применяться.

Локальные переменные

Локальные переменные – это переменные, объявленные внутри блока, в частности внутри функции. Область действия локальной переменной – блок.

Локальная переменная существует пока выполняется блок, в котором эта переменная объявлена. При выходе из блока эта переменная (и ее значение) теряется.

Локальную переменную обязательно надо инициализировать.

Переменные могут быть локальными и по отношению к функции main().

Рекомендации.

  • Используйте только локальные объявления для таких переменных, как счетчики циклов и т.п.

  • Локализуйте переменные в функциях для изоляции данных в различных частях программы друг от друга.

  • Обязательно инициализируйте локальные переменные, чтобы знать наверняка, какие значения в них находятся.

В языке Си локальные переменные могут быть автоматическими и статическими.

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

Автоматические переменные хранятся в оперативной памяти машины, точнее, в стеке.

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

Область действия локальной статической переменной - вся программа. Место в памяти под локальные статические переменные выделяется в начале работы программы в разделе глобальных и статических переменных. Однако область видимости локальных статических переменных такая же, как и у автоматических. Значение статических переменных сохраняется от одного вызова функции до другого. Локальные статические переменные инициализируются нулем, если не указан другой инициализатор. При последующих вызовах функции, в которой описана эта переменная, инициализации не происходит.

Например, функция печати хотела бы знать, сколько строк уже послано на принтер, чтобы определить, не следует ли начать новую страницу.

void print(int x) {

static int lineCount;

/* Далее идут операторы функции */

}

В языке Си локальные переменные можно объявить в любом блоке программы (т.е. в любом фрагменте кода, заключенном в фигурные скобки). Объявления переменных должны стоять в блоке первыми, раньше всех остальных операторов.

Пример такого объявления.

#include <stdio.h>

main() {

/* объявление переменной, локальной в main(). */

int count = 0;

printf("\n До блока, count = %d", count);

/* Открытие блока */

{

/* Объявление переменной, локальной в блоке. */

int count =999;

printf("\n В блок, count = %d", count);

}

printf("\n После блока, count = %d\n", count);

}

Резульлат:

До блока, count = 0

В блоке, count =999

После блока, count = 0

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

Эта разновидность локальных переменных встречается в практике программирования крайне редко. Основное применение локальных переменных в блоках состоит в том, чтобы локализовать смысловую ошибку в программе: отделить часть программы фигурными скобками, объявить там локальные переменные и проследить за тем, что с ними произойдет. Еще одним их преимуществом можно считать то, что объявление и инициализация переменной выполняются в непосредственной близости от операторов, которые ее используют. Это помогает сделать программу более удобочитаемой.