Sunteți pe pagina 1din 3

VARIABILE LOCALE I GLOBALE C++

Aspecte teoretice generale:


Orice variabil C++ se caracterizeaz prin atributele:
1. Clasa de memorare;
2. Vizibilitatea;
3. Durata de viata;
4. Identificatorul variabilei;
5. Tipul variabilei;
6. Zon de memorie.
1. CLASA DE MEMORARE
Clasa de memorare precizeaz locul unde este memorat variabila. Spaiul rezervat, de sistemul de
operare, unei variabile, poate fi:
ntr-un segment de date, spaiu rezervat variabilelor globale;
n stiv, pentru parametrii funciilor i variabile locale
n zona heap, variabilele alocate dinamic.
2. VIZIBILITATEA
Vizibilitatea precizeaz liniile textului surs din care variabila poate fi accesat. Se ntlnesc
urmtoarele situaii:
Vizibilitate la nivel de bloc: variabila este recunoscut ntr-un bloc din momentul
declarrii pn la sfritul blocului.
Vizibilitatea la nivel de fiier: variabila este recunoscut ntr-un fiier; n cazul n care
programul ocupa un fiier surs.
Vizibilitatea la nivel de clas: va fi tratat la programarea orientate pe obiecte.
3. DURATA DE VIAA
Durata de via precizeaz timpul n care variabila respectiv are alocat spaiu n memoria
intern. Se ntlnesc urmtoarele situaii:
Durata static: variabila are alocat spaiu n memoria intern n tot timpul execuiei
programului.
Durata local: variabila are alocat spaiu n memoria intern n timpul n care se execut
instruciunile blocului n care a fost declarat.
Durata dinamic: variabila are alocat spatiu, n heap, n funcie de necesitile
programatorului, prin funcii sau operatori specifici.
4. IDENTIFICATORUL VARIABILEI
Identificatorul este numele dat variabilei n momentul declarrii sale, cu scopul identificrii ntre
variabile diferite. n general, primele 31 de caractere sunt semnificative.
5. TIPUL VARIABILEI
Tipul variabilei precizeaz apartenena variabilei la un domeniu de valori nzestrat cu operaii
specifice i numrul de octei rezervai pentru memorarea datei respective.
6. ZONA DE MEMORIE
Fiecare variabil are alocat o zon proprie n memorie, precizat prin adresa de nceput i
dimensiune (numr de octei).

n funcie de atributele pe care le au, variabilele se clasific astfel:


- variabile globale;
- variabile locale;
- variabile dinamice.
VARIABILE GLOBALE
Variabilele globale se caracterizeaz astfel:
-declaraia definiie a lor este n afara oricrei funcii;
-li se aloc spaiu ntr-un segment de date, nainte de execuia programului;
-au durata de via static;
-sunt iniializate implicit cu 0; pot fi iniializate explicit numai cu valori constante;
-vizibilitatea lor poate fi extins la nivelul ntregului program.
Acestea se declar n afara corpului oricrei funcii, ca mai jos:
#include<iostream>
int b;
int a,
main()
{ b=4;
int t()
cout<<a<<endl;
{ a=3;
t();
cout<<a;
}
}
Variabilele a i b sunt globale. n astfel de cazuri, variabilele respective pot fi utilizate de
toate funciile care urmeaz n textul surs declaraiei variabilei respective. Din acest motiv, astfel de
variabile se numesc globale.
!!! La declarare, variabilele globale sunt iniializate implicit cu 0.
VARIABILE LOCALE
Variabilele locale se clasific astfel:
- variabile locale automatice;
- variabile locale statice.
Variabilele locale automatice sunt
- declaraia definiie a lor se face n interiorul unui bloc, i vizibilitatea este la nivelul acestuia;
- li se aloc spaiu pe stiv sau n registrele microprocesorului atunci cnd declaraia definiie a lor
este precedat de specificatorul register, cnd se ntlnete declaraia definiie;
- sunt dezalocate cnd se iese din blocul respectiv;
- pot fi iniializate explicit cu valori constante sau cu valori variabile;
- vizibilitatea lor nu poate fi extins n afara blocului n care au fost declarate.
Acestea sunt declarate n corpul funciilor. Mai precis, pot fi declarate n orice bloc (instruciune
compusa) al acestora.
!!!Variabilele declarate n corpul functiei main() sunt tot locale. n programul urmtor,
variabilele a i b sunt locale.

Variabila a este declarat n corpul funciei t(), iar variabila b este declarat n corpul funciei main().
Exemplu:
main()
void t()
{ int b=4;
{ int a=3;
}
}

*Exemplu : n care apar variabile locale automatice:


#include <iostream>
void f()
{
int i=1,j=i;
cout<<i<< <<j<<endl;
{
int i=2,j=i;
cout<< <<j<< <<endl;
{
int i=3,j=i;
cout<< <<i<< <<j<<endl;
}
cout<<i<< <<j<<endl;
}
cout<<i<< <<j<<endl;
}
Se afieaz:

main()
{
f();
}

1 1
2

3 3
1 1
Comentariu: Exemplul anterior ilustreaz faptul c domeniul de vizibilitate al unei variabile locale
automatice este blocul n care se gasete declaraia definiie a acesteia.
Observaie: n acelai bloc nu pot fi declarate mai multe variabile automatice cu acelai nume, dar pot
fi declarate variabile locale (automatice) cu acelai nume n blocuri diferite!

S-ar putea să vă placă și