Statične spremenljivke imajo lastnost, da ohranijo svojo vrednost tudi potem, ko so izven svojega obsega! Zato statična spremenljivka ohrani svojo prejšnjo vrednost v prejšnjem obsegu in se v novem obsegu ne inicializira znova.
Sintaksa:
static data_type var_name = var_value;>
Sledi nekaj zanimivih dejstev o statičnih spremenljivkah v C:
kako velik je zaslon mojega monitorja
1) Statična spremenljivka int ostane v pomnilniku, medtem ko se program izvaja. Normalna ali samodejna spremenljivka se uniči, ko se konča klic funkcije, kjer je bila spremenljivka deklarirana.
Na primer, lahko uporabimo statični int za štetje, kolikokrat je funkcija poklicana, vendar samodejne spremenljivke ni mogoče uporabiti za ta namen.
Primer
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;> }> |
>
>Izhod
1 2>
Zgornji program natisne 1 2, ker se statične spremenljivke inicializirajo samo enkrat in živijo do konca programa. Zato lahko ohranijo svojo vrednost med več klici funkcij.
Poskusimo z isto kodo za lokalno samodejno spremenljivko.
Primer
mysql pokaži uporabnike
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;> }> |
mesta v avstraliji
>
>Izhod
1 1>
2) Statičnim spremenljivkam je dodeljen pomnilnik v podatkovnem segmentu, ne v segmentu sklada. Glej postavitev pomnilnika programov C za podrobnosti.
3) Statične spremenljivke (kot so globalne spremenljivke) so inicializirane kot 0, če niso eksplicitno inicializirane. Na primer v spodnjem programu je vrednost x natisnjena kot 0, medtem ko je vrednost y nekaj smeti. glej to za več podrobnosti.
Primer
C
// C program to illustrate the default value of static> // variables> #include> int> main()> {> >static> int> x;> >int> y;> >printf>(>'%d
%d'>, x, y);> }> |
>
1nf 2nf 3nf
>
Izhod
0 [some_garbage_value]>
4) V C je mogoče statične spremenljivke inicializirati samo s konstantnimi literali. Naslednji program na primer ne uspe pri kompilaciji. glej to za več podrobnosti.
Primer
C
java lambda izrazi
#include> int> initializer(>void>)> {> >return> 50;> }> > int> main()> {> >static> int> i = initializer();> >printf>(>' value of i = %d'>, i);> >getchar>();> >return> 0;> }> |
>
>
Izhod
In function 'main': 9:5: error: initializer element is not constant static int i = initializer(); ^>
Opomba: Upoštevajte, da ta pogoj ne drži v C++. Torej, če program shranite kot program C++, se bo prevedel in dobro deloval.
5) V C/C++ so možne tudi statične globalne spremenljivke in funkcije. Namen teh je omejiti obseg spremenljivke ali funkcije na datoteko. Prosimo, glejte Statične funkcije v C za več podrobnosti.
6) Statičnih spremenljivk ne smete deklarirati znotraj strukture. Razlog je v tem, da prevajalnik C zahteva, da so vsi elementi strukture postavljeni skupaj (tj.) dodelitev pomnilnika za člane strukture mora biti sosednja. Možno je deklarirati strukturo znotraj funkcije (segment sklada) ali dinamično dodeliti pomnilnik (segment kopice) ali pa je celo globalen (BSS ali podatkovni segment). Ne glede na to, bi se morali vsi člani strukture nahajati v istem segmentu pomnilnika, ker se vrednost za element strukture pridobi s štetjem odmika elementa od začetnega naslova strukture. Ločevanje enega samega člana na podatkovni segment izniči namen strukture in mogoče je, da je celotna struktura statična.
Povezani članki:
- Statična ključna beseda v C++
- Kviz o statičnih ključnih besedah
- Statični podatkovni člani v C++
- Kdaj se uničijo statični objekti?
- Zanimiva dejstva o statičnih funkcijah članov
- Ali so lahko statične funkcije virtualne?
- Primerjava statičnih ključnih besed v C++ in Javi
- Statične funkcije v C