logo

Statiske variable i C

Statiske variable har den egenskab, at de bevarer deres værdi, selv efter at de er uden for deres anvendelsesområde! Derfor bevarer en statisk variabel sin tidligere værdi i sit tidligere omfang og initialiseres ikke igen i det nye omfang.

Syntaks:

  static   data_type   var_name   = var_value;>

Følgende er nogle interessante fakta om statiske variable i C:



hvad er awt

1) En statisk int-variabel forbliver i hukommelsen, mens programmet kører. En normal eller auto-variabel ødelægges, når et funktionskald, hvor variablen blev erklæret, er forbi.
For eksempel kan vi bruge statisk int til at tælle antallet af gange, en funktion kaldes, men en autovariabel kan ikke bruges til dette formål.

Eksempel

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>

Ovenstående program udskriver 1 2, fordi statiske variable kun initialiseres én gang og lever indtil programmets afslutning. Derfor kan de bevare deres værdi mellem flere funktionskald.

Lad os prøve den samme kode for den lokale autovariabel.

Eksempel

java null check

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) Statiske variable tildeles hukommelse i datasegmentet, ikke staksegmentet. Se den hukommelseslayout af C-programmer for detaljer.

3) Statiske variable (som globale variabler) initialiseres som 0, hvis de ikke initialiseres eksplicit. For eksempel i nedenstående program, er værdien af ​​x udskrevet som 0, mens værdien af ​​y er noget skrald. Se det her for flere detaljer.

Eksempel

C

find blokerede numre på Android




// C program to illustrate the default value of static> // variables> #include> int> main()> {> >static> int> x;> >int> y;> >printf>(>'%d %d'>, x, y);> }>

>

metode tilsidesættelse i java
>

Produktion

0  [some_garbage_value]>

4) I C kan statiske variable kun initialiseres ved hjælp af konstante literaler. For eksempel fejler følgende program i kompileringen. Se det her for flere detaljer.

Eksempel

C




find i streng c++

#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();  ^>

Bemærk: Bemærk venligst, at denne betingelse ikke gælder i C++. Så hvis du gemmer programmet som et C++ program, ville det kompilere og køre fint.

5) Statiske globale variabler og funktioner er også mulige i C/C++. Formålet med disse er at begrænse omfanget af en variabel eller funktion til en fil. Vær sød at henvise til Statiske funktioner i C for flere detaljer.

6) Statiske variable bør ikke erklæres inde i en struktur. Årsagen er, at C-kompileren kræver, at hele strukturelementerne placeres sammen (dvs.) hukommelsesallokering for strukturmedlemmer skal være sammenhængende. Det er muligt at erklære struktur inde i funktionen (stacksegment) eller allokere hukommelse dynamisk (heap-segment), eller det kan endda være globalt (BSS eller datasegment). Uanset hvad der måtte være tilfældet, bør alle strukturmedlemmer ligge i det samme hukommelsessegment, fordi værdien for strukturelementet hentes ved at tælle elementets offset fra strukturens begyndelsesadresse. Udskillelse af ét medlem alene til et datasegment besejrer formålet med struktur, og det er muligt at have en hel struktur som statisk.

Relaterede artikler:

  • Statisk søgeord i C++
  • Quiz om statisk søgeord
  • Statiske datamedlemmer i C++
  • Hvornår ødelægges statiske genstande?
  • Interessante fakta om statiske medlemsfunktioner
  • Kan statiske funktioner være virtuelle?
  • Sammenligning af statiske nøgleord i C++ og Java
  • Statiske funktioner i C