статический {тип данных} {имя переменной}
Статические локальные переменные
Когда переменная в функции статична, переменная сохраняет свое значение между вызовами функции.
//Example1.c
#включают
intfun1()
{
intсчитатьзнак равно0;
считать++;
возвращениесчитать;
}
intfun2()
{
статический intсчитатьзнак равно0;
считать++;
возвращениесчитать;
}
intглавный()
{
printf ('fun1 1-й вызов возвращается:% d п',fun1());
printf ('fun1 2-й вызов возвращается:% d п п',fun1());
printf ('fun2 1-й вызов возвращается:% d п',fun2());
printf ('fun2 2-й вызов возвращается:% d п',fun2());
возвращение 0;
}
В примере 1.c у нас есть две функции: fun1 () а также fun2 () . В fun1 () , мы объявляем одну переменную (count) и инициализируем ее значением 0. Затем мы увеличиваем значение переменной count и возвращаем результирующее значение. С использованием главный() , мы называем fun1 () дважды, и каждый раз возвращается значение 1, потому что переменная count очищается при вызове fun1 () завершено. В fun2 () мы объявили переменную count как статическую переменную. Таким образом, его ценность сохраняется. С использованием главный() , мы называем fun2 () дважды: в первый раз возвращается значение 1, а во второй раз возвращается значение 2.
Статические глобальные переменные
Статическая глобальная переменная ведет себя так же, как и другие глобальные переменные, но к ней нельзя получить доступ из другой программы C.
Статические функции
В C функции по умолчанию являются глобальными. Однако, если мы объявляем статическую функцию, тогда функция будет локальной и к ней нельзя будет получить доступ из другой программы C.
Инициализация статических переменных
Если статическая переменная не инициализирована явно, она инициализируется как 0.
//Example2.c
#включают
intглавный()
{
статический intя;
printf ('Значение i:% d п',я);
возвращение 0;
}
В Example2.c мы объявили статическую переменную i, которая не инициализирована. Однако, поскольку переменная статична, она автоматически инициализируется значением 0.
Важно отметить, что статическая переменная должна быть инициализирована константным литералом; мы не можем использовать возвращаемое значение функции для инициализации статической переменной.
//Example3.c#включают
intfun1()
{
возвращение 5;
}
intглавный()
{
статический intязнак равноfun1();
printf ('Значение i:% d п',я);
возвращение 0;
}
В Example3.c мы пытаемся инициализировать статическую переменную, используя возвращаемое значение fun1 () . Однако, как видите, при компиляции кода возвращается ошибка.
Резюме
Время жизни статической переменной и время жизни программы равны.
Если статическая переменная не инициализирована, она примет значение по умолчанию 0.
Ни глобальная статическая переменная, ни статическая функция недоступны из программы, отличной от той, в которой она была определена.