Статические переменные

Статические переменные

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

/* статическая переменная */

main( )

{

int count;

for (count = 1; count <= 3; count++)

{

printf(" Итерация %d: ", count);

trystat( );

}

}

trystat( )

{

int fade = 1;

static int stay; = 1;

printf("fade = %d и stay = %d ", fade++, stay++);

}

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

Итерация 1:

fade = 1 и staly = 1

Итерация 2:

fade = 1 и stay = 2

Итерация 3:

fade = 1 и stay = 3

Статическая переменная stay"помнит", что ее значение было увеличено на 1, в то время как для переменной fade начальное значение устанавливается каждый раз заново. Это указывает на разницу в инициализации: fade инициализируется каждый раз, когда вызывается trystat( ), в то время как stay инициализируется только один раз при компиляции функции trystat( ).