Evaluare utilizator: 5 / 5

Steluță activăSteluță activăSteluță activăSteluță activăSteluță activă
 

Variabilele locale sunt create automat când începe execuţia unei funcţii şi sunt distruse  când execuţia funcţiei se termină, iar după aceea sunt re-create când funcţia este apelată din nou. De exemplu, dacă o funcţie este apelată de mai multe ori în program, valorile stocate de variabilele locale nu persistă între apelurile funcţiei.

Aceste caracteristici ale variabilelor locale se datorează faptului că acestea sunt stocate temporar în stivă de către compilator. Aceste caracteristici ale variabilelor locale sunt ilustrate în exemplul de mai jos:

Exemplu nr.1

1 // Acest program arata ca variabilele locale nu retin

2 // valorile lor intre apelurile unei functii.

3 #include <iostream>

4 using namespace std;

5

6 // Prototipul functiei

7 void f_static();

8 int main()

9 {

10 f_static();

11 f_static();

12 return 0;

13 }

14

15 // Definitia functiei f_static

16 void f_static()

17 {

18 int var_local = 10; // Variabila locala

19

20 cout << "var_local: " << var_local << endl;

21 var_local = 50;

22 }

Rezultatul codului de mai sus:

var_local: 10

var_local: 10

Press any key to continue……….

La primul apel al funcţiei f_static(), variabila locală var_local este iniţializată cu valoarea 10 pe linia 18, iar apelurile funcţiiei f_static()de pe liniile 10 şi 11 vor afişa valoarea 10, chiar dacă pe linia 21 variabila var_local primeşte valoarea 50. Acest lucru se datorează faptului că variabila locală var_local este distrusă după terminarea execuţiei funcţiei, după care este reiniţializată la un nou apel.

Dar, câteodată ne vom dori ca variabila locală să reţină valoarea stocată între apelurile unei funcţii. Acest lucru se va putea realiza dacă vom utiliza o variabilă locală statică , deoarece acestea nu sunt distruse la terminarea execuţiei unei funcţii.

O variabilă locală statică nu este memorată pe stivă, ci în segmentul de date. Aceasta înseamnă că va avea o zonă de memorie alocată de către compilator de la prima execuţia a funcţiei în care este declarată. Domeniul de vizibilitate există atâta timp cât programul din care face parte se execută, chiar dacă este vizibilă doar în interiorul funcţiei în care a fost declarată. De asemenea, dacă apelaţi din nou funcţia compilatorul nu va efectua iniţializarea din nou. Iniţializarea unei variabile statice este diferită de celelalte iniţializări ale variabilelor. Exemplul de mai jos va scoate în evidenţă aceste caracteristici ale variabilelor statice:

Exemplu nr.2

// Acest program arata caracteristicile variabilelor statice.

#include <iostream>

using namespace std;

 

void f_static1(); // Prototipul functiei

 

int main()

{

// Apelarea functiei f_static1 de cinci ori.

for (int contor = 0; contor < 5; contor++)

f_static1();

 

return 0;

}

 

 

// Definitia functiei f_static1()

void f_static1()

{

static int var_static;

 

cout << "var_static: " << var_static << endl;

 

var_static++;

}

 

Rezultatul codului de mai sus:

var_static:  0

var_static:  1

var_static:  2

var_static:  3

var_static:  4

Press any key to continue……….

Din exemplul de mai sus putem să observăm că variabila locală var_static este precedată de specificatorul  static , ceea ce semnifică că variabila locală respectivă este statică. De asemenea, putem observa că variabila statică var_static nu a fost iniţializată. La fel ca şi variabilele globale, variabilele locale statice sunt iniţializate automat (implicit) cu zero. Desigur, voi puteţi furniza propria voastră valoare de iniţializarea unei variabile locale statice. De asemenea, se poate observa că variabila statică var_static reţine ultima valoare între cele două apeluri ale funcţiei respective, deoarece în funcţie utilizăm variabila statică de incrementare var_static++.

 

Totodată, dacă nu iniţializaţi variabila locală statică, atunci aceasta se poate iniţializa doar o singură dată. Acest lucru se datorează faptului că variabila statică este creată o singură dată în timpul execuţiei unui program. Acest aspect se poate observa din exemplul de mai jos:

Exemplul nr.3

// Acest program demonstreaza ca variabila statica

// se initializeaza o singura data.

#include<iostream>

usingnamespace std;

 

void f_static2(); // Prototipul functiei

 

int main()

{

// Apelul functiei f_static2 de cinci ori.

for (int contor = 0; contor < 5; contor++)

f_static2();

 

return 0;

}

 

 

// Definitia functiei f_static2().

void f_static2()

{

staticint var_static = 2;

 

cout << "var_static: " << var_static << endl;

 

var_static++;

}

Rezultatul codului de mai sus:

var_static:  2

var_static:  3

var_static:  4

var_static:  5

var_static:  6

Press any key to continue………

Deşi , variabila var_static este iniţializată cu 2, celelalte apeluri ale funcţiei f_static2 afişează valorile 3, 4, 5 şi 6, deoarece variabila statică reţine ultima valoare şi numai este reiniţializată.