Автоматические и статические локальные переменные, глобальные переменные

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

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

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

Если этого требуется избежать, при объявлении локальных переменных используется модификатор static:

void Func (int A) // определение функции{

printf (“\n N M\n”);

while (A--) { static int N = 0; int M = 0;

printf (“ %d %d\n”, N++, M++);

}} void main(){ Func(4);//вызов функции getch();}

Статическая локальная переменная N размещается в сегменте данных и инициализируется только один раз при первом выполнении оператора, содержащего ее определение, а автоматическая локальная переменная M инициализируется нулём каждый раз при входе в блок. Программа выведет на экран:

N M 0 0 1 0 2 0 3 0

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

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

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

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: