статичен {тип данни} {име на променлива}
Статични локални променливи
Когато променлива във функция е статична, променливата запазва стойността си между извикванията на функция.
// Пример1.c
#включва
intзабавление1()
{
intброя=0;
броя++;
връщанеброя;
}
intзабавление2()
{
статичен intброя=0;
броя++;
връщанеброя;
}
intглавен()
{
printf ('fun1 връща първото обаждане: %dн',забавление1());
printf ('fun1 Връща второ повикване: %dнн',забавление1());
printf ('fun2 връща първото обаждане: %dн',забавление2());
printf ('fun2 връща второ повикване: %dн',забавление2());
връщане 0;
}
В пример 1.в имаме две функции: fun1 () и fun2 () . В fun1 () , декларираме една променлива (count) и я инициализираме на 0. След това увеличаваме променливата count и връщаме получената стойност. Използвайки main () , ние се обаждаме fun1 () два пъти и всеки път се връща стойност 1, защото променливата count се изчиства при извикването към fun1 () е завършено. В fun2 () декларирахме променливата count като статична променлива. Следователно стойността му се запазва. Използвайки main () , ние се обаждаме fun2 () два пъти: първият път се връща стойност 1, а вторият се връща стойност 2.
Статични глобални променливи
Статичната глобална променлива се държи по същия начин като другите глобални променливи, но не може да бъде достъпна от друга C програма.
Статични функции
В C функциите са глобални по подразбиране. Ако обаче декларираме статична функция, тогава функцията е локална и не може да бъде достъпна от друга C програма.
Инициализиране на статични променливи
Ако статична променлива не е изрично инициализирана, тя се инициализира като 0.
// Пример2.в
#включва
intглавен()
{
статичен inti;
printf („Стойност на i: %dн',i);
връщане 0;
}
В Пример 2.в декларирахме статична променлива i, която не е инициализирана. Въпреки това, тъй като променливата е статична, тя автоматично се инициализира на 0.
Важно е да се отбележи, че статичната променлива трябва да бъде инициализирана от константален литерал; не можем да използваме връщаща стойност на функция за инициализиране на статична променлива.
// Пример3.в#включва
intзабавление1()
{
връщане 5;
}
intглавен()
{
статичен inti=забавление1();
printf („Стойност на i: %dн',i);
връщане 0;
}
В Example3.c се опитваме да инициализираме статична променлива, като използваме връщащата стойност на fun1 () . Както можете да видите, при компилирането на кода се връща грешка.
Резюме
Животът на статична променлива и животът на програмата са равни.
Ако статична променлива не е инициализирана, тя ще приеме стойност по подразбиране 0.
Нито глобална статична променлива, нито статична функция са достъпни от програма, различна от тази, в която е дефинирана.