Referat Pointeri
Mai jos puteti citi fragmente din
Referat Pointeri si de asemenea puteti face
Download Referat PointeriCiteste fragmente din Referat Pointeri
Pointeri
Notiunea de pointer
Pointerii au fost introdusi in limbajele de programare pentru a putea
rezolva mai eficient anumite probleme sau pentru a da mai multa
claritate anumitor programe.
O prima definitie poate fi urmatoarea:
Pointerul este o variabila ce contine adresa unui obiect.
Obiectul a carei adresa este retinuta de pointer poate fi:
variabila
functie
Fie urmatorul exemplu:
int x;
int *px;
Am definit o variabila de tip intreg x si o variabila pointer, care
poate contine adresa unei variabile de tip intreg. Simbolul * ce apare
in stanga variabilei px arata ca px este o variabila pointer.
Prin atribuirea
px=&x;
pointerul va avea ca valoare adresa de memorie alocata variabilei x
(vezi laboratorul nr.1, definitia variabilei). Operatorul unar & este
utilizat pentru a se obtine adresa variabilei x (operator unar=are un
singur operand)
Acum putem sa lucram cu continutul variabilei x (i.e cu valoarea
acesteia) prin intermediul pointerului px, deci indirect, fara sa mai
folosim variabila x. La prima vedere, aceasta modalitate de lucru poate
parea dificila si nu tocmai utila. Necesitatea utilizarii pointerilor va
apare cu mai multa claritate in sectiunea dedicata sirurilor de
caractere si functiilor.
Exemplul 1. Fie programul urmator:
#include
void main()
{
int x,y;
int *px;
cout<<"x=";
cin>>x;
cout<<"y=";
cin>>y;
px=&x;
cout<<"x are valoarea "<<*px;
*px=y;
cout<<"
x a devenit "<
void main()
{
double x,y,z;
double *px, *py, *pz;
cin>>x;
cin>>y;
px=&x;
py=&y;
pz=&z;
*pz=*px+*py;
cout<<"Suma este: "<<*pz;
}
2. Pointeri si tablouri
In limbajul C, exista o foarte stransa legatura intre pointeri si
tablouri, astfel ca pointerii si tablourile sunt tratate la fel. Orice
program in care apar tablouri poate fi modificat astfel incat sa
foloseasca poiteri in locul tablourilor. In aceasta sectiune vom discuta
despre legatura dintre pointeri si vectori (tablouri unidimensionale).
Fie urmatoarele declaratii:
int a[20];
int *pa;
Am declarat o variabila a , care este un vector cu maxim 20 elemente
intregi si un pointer la o variabila de tip intreg. Dupa cum se stie, o
valoare int are nevoie de 16 biti pentru a fi memorata, adica 2 bytes (
o variabila int poate retine numere intregi intre -32768 si 32767, vezi
curs Bazele Informaticii). Pentru tabloul a vor fi alocati 2ï‚· 20=40
bytes consecutivi in memorie adica, pentru primul element a[0] sunt
alocati primii 2 bytes, pentru a[1] urmatorii 2 bytes,…, pentru a[19]
ultimii 2 bytes din cei 40 alocati.
Fie atribuirea:
pa=&a[0];
Dupa aceasta atribuire, pointerul pa contine adresa primului element al
vectorului, adica pa pointeaza la inceputul vectorului a.
Daca scriem pa=&a[3]; atunci pa va referi elementul al 4-lea din
vectorul a, iar *pa va contine valoarea sa.
Operatiile care se pot realiza cu pointeri sunt:
comparatia
adunarea unui pointer cu un intreg
scaderea unui intreg dintr-un pointer
Doi pointeri pot fi comparati folosind operatori relationali. In
comparatia:
if(p1==p2) cout<<â€ÂAdrese identiceâ€Â;
else cout<<â€ÂAdrese diferiteâ€Â;
se verifica daca adresa memorata de p1 este aceeasi cu adresa retinuta
de p2, unde p1 si p2 sunt pointeri de acelasi tip.
Se poate compara un pointer cu valoarea NULL (sau 0). Un pointer are
valoarea NULL (valoare nedefinita) daca nu refera nici un obiect.
Adunarea unui pointer cu un intreg este definita numai atunci cand
pointerul refera un tablou (un element al tabloului). Scaderea este
definita in acelasi caz.
Exemplul 3. Sa se citeasca elementele unui vector si sa se afiseze
acestea utilizand pointeri.
#include
void main()
{
int a[20];
int *pa;
int i,n;
cout<<"Numarul de elemente= ";
cin>>n;
for(i=0;i>a[i];
}
//afisarea vectorului folosind pointeri
pa=&a[0];
for(i=0;i