Statiska variabler har egenskapen att bevara sitt värde även efter att de är utanför deras räckvidd! Därför bevarar en statisk variabel sitt tidigare värde i sitt tidigare omfång och initieras inte igen i det nya omfånget.
Syntax:
static data_type var_name = var_value;>
Följande är några intressanta fakta om statiska variabler i C:
anropa javascript-funktion från html
1) En statisk int-variabel finns kvar i minnet medan programmet körs. En normal eller autovariabel förstörs när ett funktionsanrop där variabeln deklarerades är över.
Till exempel kan vi använda statisk int för att räkna antalet gånger en funktion anropas, men en autovariabel kan inte användas för detta ändamål.
Exempel
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;> }> |
>
>Produktion
1 2>
Ovanstående program skriver ut 1 2 eftersom statiska variabler bara initieras en gång och lever till slutet av programmet. Det är därför de kan behålla sitt värde mellan flera funktionsanrop.
Låt oss prova samma kod för den lokala autovariabeln.
Exempel
ladda ner youtube-videor vlc
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;> }> |
>
>Produktion
1 1>
2) Statiska variabler tilldelas minne i datasegmentet, inte stacksegmentet. Se den minneslayout för C-program för detaljer.
3) Statiska variabler (som globala variabler) initieras som 0 om de inte initieras explicit. Till exempel i programmet nedan skrivs värdet av x ut som 0, medan värdet på y är något skräp. Ser detta för mer detaljer.
Exempel
C
linux värd
// C program to illustrate the default value of static> // variables> #include> int> main()> {> >static> int> x;> >int> y;> >printf>(>'%d
%d'>, x, y);> }> |
>
knn
>
Produktion
0 [some_garbage_value]>
4) I C kan statiska variabler endast initieras med konstanta bokstaver. Till exempel misslyckas följande program i kompileringen. Ser detta för mer detaljer.
Exempel
C
annat om bash
#include> int> initializer(>void>)> {> >return> 50;> }> > int> main()> {> >static> int> i = initializer();> >printf>(>' value of i = %d'>, i);> >getchar>();> >return> 0;> }> |
>
>
Produktion
In function 'main': 9:5: error: initializer element is not constant static int i = initializer(); ^>
Notera: Observera att detta villkor inte gäller i C++. Så om du sparar programmet som ett C++-program skulle det kompilera och fungera bra.
5) Statiska globala variabler och funktioner är också möjliga i C/C++. Syftet med dessa är att begränsa omfattningen av en variabel eller funktion till en fil. Vänligen hänvisa till Statiska funktioner i C för mer detaljer.
6) Statiska variabler ska inte deklareras inuti en struktur. Anledningen är att C-kompilatorn kräver att hela strukturelementen placeras tillsammans (dvs.) minnesallokering för strukturelement ska vara sammanhängande. Det är möjligt att deklarera struktur inuti funktionen (stacksegment) eller allokera minne dynamiskt (heapsegment) eller det kan till och med vara globalt (BSS eller datasegment). Oavsett vad som kan vara fallet, bör alla strukturmedlemmar finnas i samma minnessegment eftersom värdet för strukturelementet hämtas genom att räkna elementets offset från strukturens startadress. Att separera en medlem ensam till ett datasegment motverkar syftet med strukturen och det är möjligt att ha en hel struktur som statisk.
Relaterade artiklar:
- Statiskt nyckelord i C++
- Frågesport om statiskt nyckelord
- Statiska datamedlemmar i C++
- När förstörs statiska föremål?
- Intressanta fakta om statiska medlemsfunktioner
- Kan statiska funktioner vara virtuella?
- Jämförelse av statiska nyckelord i C++ och Java
- Statiska funktioner i C