statyczny typ danych nazwa zmiennej
Statyczne zmienne lokalne
Gdy zmienna w funkcji jest statyczna, zmienna zachowuje swoją wartość między wywołaniami funkcji.
//Przykład 1.do#zawierać
int zabawa1()
liczba int=0;
liczyć++;
liczba zwrotów;
int zabawa2()
statyczna liczba int=0;
liczyć++;
liczba zwrotów;
int main()
printf("fun1 pierwsze wywołanie zwraca : %d\n",fun1());
printf("fun1 drugie wywołanie zwraca : %d\n\n",fun1());
printf("fun2 pierwsze wywołanie zwraca : %d\n",fun2());
printf("drugie wywołanie fun2 zwraca : %d\n",fun2());
zwróć 0;
W przykładzie 1.c, mamy dwie funkcje: zabawa1() i zabawa2(). W zabawa1(), deklarujemy jedną zmienną (count) i inicjujemy ją na 0. Następnie zwiększamy 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 razem zwracana jest wartość 2.
Statyczne zmienne globalne
Statyczna zmienna globalna zachowuje się tak samo jak inne zmienne globalne, ale nie można uzyskać do niej dostępu z innego programu w języku 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 w C C.
Inicjalizacja zmiennych statycznych
Jeśli zmienna statyczna nie jest jawnie inicjowana, jest inicjowana jako 0.
//Przykład2.do#zawierać
int main()
statyczna int i;
printf("Wartość i : %d\n",i);
zwróć 0;
W przykładzie 2.c, zadeklarowaliśmy zmienną statyczną i, która nie jest inicjowana. Ponieważ jednak 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 a.
//Przykład3.do#zawierać
int zabawa1()
powrót 5;
int main()
statyczny int i = fun1();
printf("Wartość i : %d\n",i);
zwróć 0;
W przykładzie3.c, próbujemy zainicjować zmienną statyczną, używając 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 jest inicjowana, przyjmie domyślną wartość 0.
Ani globalna zmienna statyczna, ani funkcja statyczna nie są dostępne z innego programu niż ten, w którym zostały zdefiniowane.