В C «статический» означает, что переменная имеет локальную область видимости в глобальном хранилище.
Область переменных в C - это блок. Другими словами, переменные могут использоваться внутри объявленного им блока. И обычно они просто сохраняют свои значения до конца блока, теряясь после этого. Пример:
{
int a;
// Only a can be used here
{
int b;
// a and b can be used here
{
int c;
// a,b and c can be used here
}
//just a and b can be used here. c is not available anymore
}
// only a can be used here. Neither b nor c are available anymore
}
Это верно, за исключением глобальных переменных, которые могут использоваться на протяжении всей программы.
Другое исключение - статическая переменная. Он виден только внутри блока, но сохраняет свое значение после его окончания.
Это означает, что если вы объявите статическую переменную внутри функции, она сохранит свое значение между вызовами функции.
Например, функция ниже имеет локальную переменную. Локальные переменные имеют область видимости блока (это означает, что вы можете получить доступ только к переменной 'var' внутри блока {}, в котором она объявлена, в случае ниже внутри функции):
void countFunction(void)
{
int var = 0;
var = var + 1;
printf("Value is %d\n", var);
}
Если переменная не является статической, при каждом вызове функции она будет выводить «Значение равно 1», поскольку переменная хранится в стеке, который выделяется при вызове функции и освобождается после возврата из функции.
Если вы измените var на static,
void countFunction(void)
{
static int var = 0;
var = var + 1;
printf("Value is %d\n", var);
}
При первом вызове функции var инициализация будет равна 0, и функция покажет «Значение равно 1». Тем не менее, во второй раз, var будет размещен уже и в глобальном пространстве. Он не будет инициализирован снова, и функция отобразит «Значение равно 2».
Это при выполнении программы.
Хотя статическая переменная выделяется до тех пор, пока ваша программа выполняется, она не сохраняет свое значение после ее завершения (программа освободит всю свою память). Единственный способ сохранить любое значение для следующего запуска - сохранить его на энергонезависимом носителе, например на диске.
Надеюсь, это поможет.