Statiniai kintamieji turi savybę išsaugoti savo vertę net tada, kai jie nepatenka į jų taikymo sritį! Taigi statinis kintamasis išlaiko savo ankstesnę vertę ankstesnėje apimtyje ir nėra vėl inicijuojamas naujoje srityje.
Sintaksė:
static data_type var_name = var_value;>
Toliau pateikiami keli įdomūs faktai apie statinius kintamuosius C:
katalogo pervadinimas
1) Statinis int kintamasis išlieka atmintyje, kol programa veikia. Įprastas arba automatinis kintamasis sunaikinamas, kai baigiasi funkcijos iškvietimas, kuriame buvo deklaruotas kintamasis.
Pavyzdžiui, galime naudoti statinį int norėdami suskaičiuoti, kiek kartų funkcija iškviečiama, tačiau automatinio kintamojo šiam tikslui naudoti negalima.
Pavyzdys
C
// C Program to illustrate the static variable lifetime> #include> // function with static variable> int> fun()> {> >static> int> count = 0;> >count++;> >return> count;> }> int> main()> {> >printf>(>'%d '>, fun());> >printf>(>'%d '>, fun());> >return> 0;> }> |
>
>Išvestis
1 2>
Aukščiau pateikta programa išspausdina 1 2, nes statiniai kintamieji inicijuojami tik vieną kartą ir veikia iki programos pabaigos. Štai kodėl jie gali išlaikyti savo vertę tarp kelių funkcijų iškvietimų.
Išbandykime tą patį kodą vietiniam automatiniam kintamajam.
Pavyzdys
java rūšiavimo eilutės
C
// C Program to illustrate local auto variable in comparison> // of static variable.> #include> // Function> int> fun()> {> >int> count = 0;> >count++;> >return> count;> }> // Driver Code> int> main()> {> >printf>(>'%d '>, fun());> >printf>(>'%d '>, fun());> >return> 0;> }> |
>
>Išvestis
1 1>
2) Statiniams kintamiesiems priskiriama atmintis duomenų segmente, o ne kamino segmente. Žiūrėkite C programų atminties išdėstymas dėl detalių.
3) Statiniai kintamieji (kaip ir pasauliniai kintamieji) inicijuojami kaip 0, jei nėra tiesiogiai inicijuojami. Pavyzdžiui, toliau pateiktoje programoje x reikšmė spausdinama kaip 0, o y reikšmė yra šiukšlė. Matyti tai daugiau detalių.
Pavyzdys
C
kas yra regex java
// C program to illustrate the default value of static> // variables> #include> int> main()> {> >static> int> x;> >int> y;> >printf>(>'%d
%d'>, x, y);> }> |
>
>
Išvestis
0 [some_garbage_value]>
4) C kalboje statinius kintamuosius galima inicijuoti tik naudojant pastovius literalus. Pavyzdžiui, šios programos kompiliavimas nepavyksta. Matyti tai daugiau detalių.
Pavyzdys
C
string Java metoduose
Java kodo pavyzdys
#include> int> initializer(>void>)> {> >return> 50;> }> > int> main()> {> >static> int> i = initializer();> >printf>(>' value of i = %d'>, i);> >getchar>();> >return> 0;> }> |
>
>
Išvestis
In function 'main': 9:5: error: initializer element is not constant static int i = initializer(); ^>
Pastaba: Atminkite, kad ši sąlyga negalioja C++. Taigi, jei išsaugosite programą kaip C++ programą, ji kompiliuotų ir veiktų gerai.
5) Statiniai globalūs kintamieji ir funkcijos taip pat galimi C/C++. Jų tikslas – apriboti kintamojo ar funkcijos apimtį iki failo. Prašau kreiptis į Statinės funkcijos C daugiau detalių.
6) Statiniai kintamieji neturėtų būti deklaruojami struktūroje. Priežastis ta, kad C kompiliatorius reikalauja, kad visi struktūros elementai būtų išdėstyti kartu (t. y., atminties paskirstymas struktūros nariams turėtų būti gretimas. Galima deklaruoti struktūrą funkcijos viduje (stack segmentas) arba dinamiškai paskirstyti atmintį (krūvos segmentas) arba ji gali būti netgi globali (BSS arba duomenų segmentas). Kad ir kaip būtų, visi struktūros nariai turėtų būti tame pačiame atminties segmente, nes struktūros elemento reikšmė gaunama skaičiuojant elemento poslinkį nuo struktūros pradžios adreso. Vieno elemento atskyrimas į duomenų segmentą pažeidžia struktūros tikslą ir galima visą struktūrą turėti statišką.
Susiję straipsniai:
- Statinis raktinis žodis C++
- Statinio raktinio žodžio viktorina
- Statinių duomenų nariai C++
- Kada sunaikinami statiniai objektai?
- Įdomūs faktai apie statines narių funkcijas
- Ar statinės funkcijos gali būti virtualios?
- Statinių raktinių žodžių palyginimas C++ ir Java
- Statinės funkcijos C