Lucrarea nr



Yüklə 0,56 Mb.
səhifə10/20
tarix17.01.2019
ölçüsü0,56 Mb.
#98835
1   ...   6   7   8   9   10   11   12   13   ...   20

4.2Referinţe


O referinţă este un alt nume pentru o variabilă. Fie T tipul unei variabile şi fie instrucţiunea ce defineşte o variabilă

T nume_variabilă;

Instrucţiunea de definire a unei referinţe este

T& nume_referinţă = nume_variabilă

unde

nume_referinţă este numele variabilei referinţă.



Variabila nume_variabilă trebuie să fie declarată înainte şi să aibă tipul T. De exemplu instrucţiunile

int x;


int& rx = x;

declară pe rx ca fiind o referinţă a lui x (este obligatoriu ca variabila x de tip întreg să fie declarată anterior). Secvenţa anterioară se poate scrie

int x, &rx = x;

Numele x şi rx sunt două nume diferite pentru aceeaşi variabilă. Ele au totdeauna aceeaşi valoare şi aceeaşi adresă.
Probleme rezolvate

Problema 1. Să se definească o funcţie care să permute valorile a două variabile tip double. Prototipul funcţiei va fi

void perm(double & a, double & b);

Programul este prezentat în continuare.
# include

using namespace std;

/* functie ce permuta valoarea a doua variabile */

void perm(double& a, double& b)

{

double c;



c = a;

a = b;


b = c;

return;


}
// testarea functiei perm

int main()

{

double x = 7.2, y = 12.5;



cout << "valorile initiale x = " << x << " y = " << y << endl;

perm(x, y);

cout << "valorile permutate x = " << x << " y = " << y << endl;

return 0;

}

Mai jos sunt reproduse rezultatele execuţiei programului.





Problema 2. Se va verifica faptul că o referinţă este o altă denumire pentru o variabilă, scriind adresele variabilei şi referinţei. Programul de rezolvare a acestei probleme este prezentat în continuare.

# include

using namespace std;

int main()

{

int a = 3;



int& ra = a;
// scrie valoarea variabilei şi referintei

cout << “valoare variabilei este” << a << endl;

cout << “valoarea referintei este “ << ra << endl;
// scrie adresa variabilei şi referintei

cout << “adresa variabilei este “ << &a << endl;

cout << “adresa referintei este ” << &ra << endl;

return 0;

}

Rezultatele execuţiei programului sunt cele de mai jos.





4.3Alocarea dinamică a memoriei


Alocarea memoriei unei variabile se face astfel

  • de către compilator, la declararea unei variabile de un tip oarecare în program,

  • cu funcţia malloc(),

  • cu operatorul new.


Alocarea memoriei cu funcţia malloc()

Alocarea memoriei unei variabile cu funcţia malloc sau operatorul new se face la execuţia programului.

Alocarea de memorie se poate face cu funcţia

void * malloc(int size);

unde size este numărul de octeţi de alocat. Tipul funcţiei este void* şi el trebuie convertit în pointer la tipul alocat. Eliberarea memoriei alocate cu funcţia malloc() se face cu funcţia

void free(p);

unde p este o variabilă tip pointer ce conţine adresa zonei de memorie ce va fi eliberate. Prototipul acestor funcţii se află în biblioteca , respectiv <cstdlib>.
Alocarea memoriei cu operatorul new

Alocarea de memorie pentru o variabilă sau pentru un vector se poate face cu operatorul new. Fie T tipul unei variabile. Operatorul new cu forma

new T

alocă memorie pentru o variabilă de tipul T, iar operatorul new cu forma



new T[n]

aloca memorie pentru un vector de tipul T cu n componente, unde n este un număr întreg. Operatorul new are ca rezultat un pointer la memoria alocată. Fie instrucţiunea

double *x, *y ;

Instrucţiunea

x = new double;

alocă memorie pentru o variabilă scalară de tip double, în timp ce instrucţiunea

y = new double[17] ;

alocă memorie pentru un vector cu 17 componente. Eliberarea memoriei alocate cu operatorul new se face cu operatorul delete. Instrucţiunea

delete x;

eliberează memoria alocată cu new double, în timp ce instrucţiunea

delete [] y;

eliberează memoria alocată vectorului cu new double[17].



4.4Probleme rezolvate


Problema 1. Se va aloca un vector de 5 componente tip double folosind operatorul new. Se vor citi componentele vectorului de la tastatură şi se va calcula suma componentelor. Sluţia problemei este următoarea.
# include

using namespace std;

int main(){

double * v = new double[5];

cout << "introduceti 5 numere " << endl;

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

cin >> v[j];

double suma = 0;

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

suma = suma + v[j];

cout << "suma : " << suma << endl;

delete [] v;

return 0;

}
Mai jos este reprodus un exemplu de execuţie.




Problema 2. Se va aloca un vector de 3 componente tip double folosind operatorul malloc. Se vor citi componentele vectorului de la tastatură şi se va calcula suma componentelor. Programul de rezolvare a problemei este prezentat mai jos.
# include

using namespace std;

# include

int main(){

double * v = (double *) malloc(3 * sizeof(double));

double s = 0;

cout << "Introduceti un sir de trei numere reale" << endl;

for(int i = 0; i < 3; i++) {

cin >> v[i];

s = s + v[i];

}

cout << "Suma numerelor este : " << s << endl;



free(v);

return 0;

}

Un exemplu de execuţie este următorul :






Yüklə 0,56 Mb.

Dostları ilə paylaş:
1   ...   6   7   8   9   10   11   12   13   ...   20




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©muhaz.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin