logo

Statiske variabler i C

Statiske variabler har egenskapen til å bevare verdien selv etter at de er utenfor deres omfang! Derfor bevarer en statisk variabel sin tidligere verdi i sitt forrige omfang og initialiseres ikke igjen i det nye omfanget.

Syntaks:



  static   data_type   var_name   = var_value;>

Følgende er noen interessante fakta om statiske variabler i C:

partielle derivater i lateks

1) En statisk int-variabel forblir i minnet mens programmet kjører. En normal eller autovariabel blir ødelagt når et funksjonskall der variabelen ble erklært er over.
For eksempel kan vi bruke statisk int for å telle antall ganger en funksjon kalles, men en autovariabel kan ikke brukes til dette formålet.

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;> }>

>

>

Produksjon

1 2>

Programmet ovenfor skriver ut 1 2 fordi statiske variabler kun initialiseres én gang og lever til slutten av programmet. Det er derfor de kan beholde verdien mellom flere funksjonskall.

La oss prøve den samme koden for den lokale autovariabelen.

Eksempel

konverter char til int java

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;> }>

>

>

Produksjon

1 1>

2) Statiske variabler tildeles minne i datasegmentet, ikke stabelsegmentet. Se minneoppsett av C-programmer for detaljer.

3) Statiske variabler (som globale variabler) initialiseres som 0 hvis de ikke initialiseres eksplisitt. For eksempel i programmet nedenfor, er verdien av x skrevet ut som 0, mens verdien av y er noe søppel. Se dette for flere detaljer.

Eksempel

C

hvorfor markørgrensesnitt i java




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

>

metodeoverstyring i java
>

Produksjon

0  [some_garbage_value]>

4) I C kan statiske variabler bare initialiseres ved å bruke konstante bokstaver. For eksempel mislykkes følgende program i kompileringen. Se dette for flere detaljer.

Eksempel

C




oppdatering fra join sql

#include> int> initializer(>void>)> {> >return> 50;> }> > int> main()> {> >static> int> i = initializer();> >printf>(>' value of i = %d'>, i);> >getchar>();> >return> 0;> }>

>

>

Produksjon

In function 'main': 9:5: error: initializer element is not constant  static int i = initializer();  ^>

Merk: Vær oppmerksom på at denne betingelsen ikke gjelder i C++. Så hvis du lagrer programmet som et C++-program, vil det kompilere og kjøre fint.

5) Statiske globale variabler og funksjoner er også mulig i C/C++. Hensikten med disse er å begrense omfanget av en variabel eller funksjon til en fil. Vennligst se Statiske funksjoner i C for flere detaljer.

6) Statiske variabler skal ikke deklareres inne i en struktur. Årsaken er at C-kompilatoren krever at hele strukturelementene plasseres sammen (dvs.) minnetildeling for strukturmedlemmer skal være sammenhengende. Det er mulig å deklarere struktur inne i funksjonen (stabelsegment) eller allokere minne dynamisk (heapsegment) eller det kan til og med være globalt (BSS eller datasegment). Uansett hva tilfellet kan være, bør alle strukturmedlemmer ligge i samme minnesegment fordi verdien for strukturelementet hentes ved å telle forskyvningen til elementet fra strukturens begynnelsesadresse. Å skille ut ett medlem alene til et datasegment motvirker formålet med struktur, og det er mulig å ha en hel struktur som statisk.

Relaterte artikler:

  • Statisk nøkkelord i C++
  • Quiz om statisk nøkkelord
  • Statiske datamedlemmer i C++
  • Når blir statiske gjenstander ødelagt?
  • Interessante fakta om statiske medlemsfunksjoner
  • Kan statiske funksjoner være virtuelle?
  • Sammenligning av statiske nøkkelord i C++ og Java
  • Statiske funksjoner i C