В 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
}
Это правда, за исключением глобальных переменных, которые могут использоваться по всей программе.
Другим исключением является статическая переменная. Он отображается только внутри блока, но сохраняет его значение после завершения блока.
Это означает, что если вы объявите статическую переменную внутри функции, она будет поддерживать ее значение между вызовами функций.
Например, приведенная ниже функция имеет локальную переменную. Локальные переменные имеют объем блока (это означает, что вы можете получить доступ только к переменной «вар» внутри блока {} она объявлена, в том случае, ниже внутри функции):
void countFunction(void)
{
int var = 0;
var = var + 1;
printf("Value is %d\n", var);
}
После того, как переменная не является статичным, каждый раз, когда вы вызываете функцию, он будет печатать «Значение равно 1», потому что переменная хранится в стеке, который распределяется по вызову функции и освобождается после возвращения функции.
Если изменить вар быть статичным,
void countFunction(void)
{
static int var = 0;
var = var + 1;
printf("Value is %d\n", var);
}
Первый раз при вызове функции переменная будет инициализирована как 0 и функция будет показывать «Значение 1». Тем не менее, во второй раз var будет уже выделен и в глобальной области. Он не будет инициализирован снова, и функция отобразит «Значение равно 2».
Это в рамках выполнения программы.
Хотя статическая переменная выделяется до тех пор, пока выполняется ваша программа, она не сохраняет свое значение после завершения вашей программы (программа освободит всю память). Единственный способ сохранить значение для следующего прогона - сохранить его на энергонезависимом носителе, таком как диск.
Надеюсь, это поможет.
'i' не станет' 1', если вы вызываете 'i + 1;'. – kennytm
Хороший! Я редактировал мой вопрос:). –