Documente Academic
Documente Profesional
Documente Cultură
Lab 4pointeri Si Referinte
Lab 4pointeri Si Referinte
Pointeri si referinte
Pointerul este o variabilă capabilă să rețină adrese ale altor variabile de tipul specificat la
declarare.
Tipul pointer se declară așa: tip_date*.
O variabilă pointer se poate scrie în felul următor:
- tip_date* nume_variabila
sau:
- tip_date * nume_variabila, respectiv, tip_date *nume_variabila.
Valoarea obținută printr-o variabilă pointer, este de fapt, valoarea de la o adresă specificată din zona de
memorie, ce se va scrie * nume_variabila.
Astfel, o variabilă este remarcată printr-un nume, printr-o valoare reținută la un moment dat din
mulțimea elementului tipului de date reprezentat și o adresă unică în zona de memorare. Adresa va
putea fi asociată unei variabile pointer.
Aplicația 1. Declararea unei variabile pointer, asocierea ca și adresă a altor variabile de tipul specificat la
declarare.
#include<iostream>
using namespace std;
int main()
{
//Varianta 1 de declarare: initializarea pointerului cu adresa unei variabile
cunoscute
int a; //variabila de tip intreg
int* b; //variabila pointer
b = &a; //initializarea variabilei pointer, prin asociere, ca si adresa a
variabilei a
a = 5;
cout << "Valorile sunt: " << a << ' ' << *b << '\n'; //aceeasi valoare
cout << "Adresele sunt: " << &a << ' ' << b << '\n'; //aceeasi adresa
system("pause");
return 0;
}
Aplicația 2. Dimensiuni reținute de variabile de tip pointer.
#include<iostream>
using namespace std;
int main()
{
cout << "Tipurile de date: char=" << sizeof(char) << " int=" << sizeof(int) << "
int_lung=" << sizeof(long long) << " real=" << sizeof(double) << '\n'; //1 4 8 8
cout << "Pointerii: char=" << sizeof(char*) << " int=" << sizeof(int*) << "
int_lung=" << sizeof(long long*) << " real=" << sizeof(double*) << '\n'; //4 4 4 4
system("pause");
return (0);
}
system("pause");
return (0);
}
Aplicația 4. Aritmetica pointerilor. Cu ajutorul pointerilor, vom citi și vom afișa 3 numere întregi, sub
reprezentarea și forma unui șir de numere.
#include<iostream>
using namespace std;
int main()
{
//declaratia
int* a = new int[3]; //un pointer pentru un sir de 3 numere intregi
//citirea
cout << "Introduceti sirul de numere intregi:\n";
cout << "\tprimul element: ";
cin >> *a;
cout << "\tal doilea element: ";
cin >> *(a + 1); //vom merge pe urmatoarea locatie consecutiva din zona de
memorie, prin aritmetica pointerilor
cout << "\tal treilea element: ";
cin >> *(a + 2);
//afisarea
cout << "Elementele citite sunt: ";
for (int i = 0; i < 3; i++)
cout << *(a + i) << ' ';
cout << '\n';
//dealocare
delete a;
system("pause");
return (0);
}
Referința este un pseudonim, o redenumire, un alias, al unei variabile din zona de memorie,
pentru care se va păstra aceeași adresă unică. Referința nu este o adresă, ea este o variabilă de un
același tip ca cel al variabilei al cărei alias este. Declarația de referință se face prin introducerea tipului
referință (tip_date&), iar declarația unei referințe se va face obligatoriu cu inițializare a sa, spre variabilă
spre care constituie pseudonim.
Aplicația 5. Declararea de referințe.
#include<iostream>
using namespace std;
int main()
{
int a; //variabila intreaga
int& b = a; //b este o referinta a lui a
a = 10;
cout << a << '\t' << b << '\n'; //10 10
cout << &a << '\t' << &b << '\n'; //aceeasi adresa
b += 5;
cout << a << '\t' << b << '\n'; //15 15
cout << &a << '\t' << &b << '\n'; //aceeasi adresa
system("pause");
return (0);
}
a) dă eroare la declarații
b) dă eroare la instrucțiuni
c) 2
d) 4
int main()
{
void* p;
int i = 21;
p = &i;
cout << i <<' '<< *(int*)p << '\n';
float f = 3.14f;
p = &f;
cout << f <<' '<< *(float*)p << '\n';
char c = 'A';
p = &c;
cout << c <<' '<< *(char*)p << '\n';
system("pause");
return 0;
}