statyczny {typ danych} {nazwa zmiennej}
Statyczne zmienne lokalne
Gdy zmienna w funkcji jest statyczna, zmienna zachowuje swoją wartość między wywołaniami funkcji.
//Przykład1.c
#włączać
intzabawa1()
{
intliczyć=0;
liczyć++;
powrótliczyć;
}
intzabawa2()
{
statyczny intliczyć=0;
liczyć++;
powrótliczyć;
}
intGłówny()
{
printf ('fun1 pierwsze wywołanie zwraca : %d ',zabawa1());
printf ('fun1 drugie wywołanie zwraca : %d ',zabawa1());
printf ('fun2 zwraca pierwsze połączenie: %d ',zabawa2());
printf ('fun2 drugie połączenie zwraca : %d ',zabawa2());
powrót 0;
}
W przykładzie 1.c mamy dwie funkcje: zabawa1() oraz zabawa2() . w zabawa1() , deklarujemy jedną zmienną (count) i inicjujemy ją na 0. Następnie inkrementujemy zmienną count i zwracamy wynikową wartość. Za pomocą Główny() , nazywamy zabawa1() dwukrotnie i za każdym razem zwracana jest wartość 1, ponieważ zmienna count jest czyszczona, gdy wywołanie zabawa1() jest zakończony. w zabawa2() zadeklarowaliśmy zmienną count jako zmienną statyczną. Dlatego jego wartość jest zachowana. Za pomocą Główny() , nazywamy zabawa2() dwa razy: za pierwszym razem zwracana jest wartość 1, a za drugim zwracana jest wartość 2.
Statyczne zmienne globalne
Statyczna zmienna globalna zachowuje się w taki sam sposób jak inne zmienne globalne, ale nie można uzyskać do niej dostępu z innego programu C.
Funkcje statyczne
W C funkcje są domyślnie globalne. Jeśli jednak zadeklarujemy funkcję statyczną, to funkcja jest lokalna i nie można do niej uzyskać dostępu z innego programu C.
Inicjalizacja zmiennych statycznych
Jeśli zmienna statyczna nie jest jawnie zainicjowana, jest inicjowana jako 0.
//Przykład2.c
#włączać
intGłówny()
{
statyczny inti;
printf ('Wartość i: %d ',i);
powrót 0;
}
W przykładzie2.c zadeklarowaliśmy zmienną statyczną i, która nie jest inicjowana. Jednak ponieważ zmienna jest statyczna, jest automatycznie inicjowana na 0.
Należy zauważyć, że zmienna statyczna musi być inicjowana stałym literałem; nie możemy użyć wartości zwracanej przez funkcję do zainicjowania zmiennej statycznej.
//Przykład3.c#włączać
intzabawa1()
{
powrót 5;
}
intGłówny()
{
statyczny inti=zabawa1();
printf ('Wartość i: %d ',i);
powrót 0;
}
W przykładzie 3.c próbujemy zainicjować zmienną statyczną przy użyciu wartości zwracanej przez zabawa1() . Jednak, jak widać, podczas kompilacji kodu zwracany jest błąd.
Streszczenie
Czas życia zmiennej statycznej i czas życia programu są równe.
Jeśli zmienna statyczna nie zostanie zainicjowana, przyjmie domyślną wartość 0.
Ani globalna zmienna statyczna, ani funkcja statyczna nie są dostępne z programu innego niż ten, w którym zostały zdefiniowane.