logo

Variabile statice în C

Variabilele statice au proprietatea de a-și păstra valoarea chiar și după ce sunt în afara domeniului lor de aplicare! Prin urmare, o variabilă statică își păstrează valoarea anterioară în domeniul său anterior și nu este inițializată din nou în noul domeniu.

Sintaxă:



  static   data_type   var_name   = var_value;>

Următoarele sunt câteva fapte interesante despre variabilele statice în C:

parametru în scriptul shell

1) O variabilă statică int rămâne în memorie în timp ce programul rulează. O variabilă normală sau automată este distrusă atunci când se termină un apel de funcție în care a fost declarată variabila.
De exemplu, putem folosi static int pentru a număra de câte ori este apelată o funcție, dar o variabilă automată nu poate fi utilizată în acest scop.

Exemplu



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

>

>

Ieșire

1 2>

Programul de mai sus afișează 1 2 deoarece variabilele statice sunt inițializate o singură dată și trăiesc până la sfârșitul programului. De aceea își pot păstra valoarea între apeluri de funcții multiple.

Să încercăm același cod pentru variabila auto locală.

Exemplu

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

>

>

Ieșire

1 1>

2) Variabilelor statice li se alocă memorie în segmentul de date, nu în segmentul stivă. Vezi layout-ul de memorie a programelor C pentru detalii.

3) Variabilele statice (cum ar fi variabilele globale) sunt inițializate ca 0 dacă nu sunt inițializate explicit. De exemplu, în programul de mai jos, valoarea lui x este tipărită ca 0, în timp ce valoarea lui y este ceva gunoi. Vedea acest pentru mai multe detalii.

Exemplu

C


compara cu java



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

>

>

Ieșire

0  [some_garbage_value]>

4) În C, variabilele statice pot fi inițializate numai folosind literale constante. De exemplu, următorul program eșuează la compilare. Vedea acest pentru mai multe detalii.

scanerul în continuare

Exemplu

C




comanda zip în linux

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

>

>

Ieșire

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

Notă: Vă rugăm să rețineți că această condiție nu este valabilă în C++. Deci, dacă salvați programul ca program C++, acesta va compila și rula bine.

5) Variabilele și funcțiile globale statice sunt, de asemenea, posibile în C/C++. Scopul acestora este de a limita domeniul de aplicare a unei variabile sau funcție la un fișier. Va rog, referiti-va la Funcții statice în C pentru mai multe detalii.

6) Variabilele statice nu trebuie declarate în interiorul unei structuri. Motivul este că compilatorul C necesită ca toate elementele structurii să fie plasate împreună (adică, alocarea memoriei pentru membrii structurii ar trebui să fie contiguă. Este posibilă declararea structurii în interiorul funcției (segment de stivă) sau alocarea dinamică a memoriei (segment heap) sau poate fi chiar globală (BSS sau segment de date). Oricum ar fi cazul, toți membrii structurii ar trebui să locuiască în același segment de memorie, deoarece valoarea pentru elementul de structură este preluată prin numărarea decalajului elementului de la adresa de început a structurii. Separarea unui singur membru într-un segment de date înfrânge scopul structurii și este posibil ca o structură întreagă să fie statică.

Articole similare:

  • Cuvânt cheie static în C++
  • Test pe cuvânt cheie static
  • Membrii de date statice în C++
  • Când sunt distruse obiectele statice?
  • Fapte interesante despre funcțiile membre statice
  • Funcțiile statice pot fi virtuale?
  • Comparația cuvintelor cheie statice în C++ și Java
  • Funcții statice în C