0% au considerat acest document util (0 voturi)
3 vizualizări2 pagini

Pointeri

Încărcat de

gefinna
Drepturi de autor
© All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca DOCX, PDF, TXT sau citiți online pe Scribd
0% au considerat acest document util (0 voturi)
3 vizualizări2 pagini

Pointeri

Încărcat de

gefinna
Drepturi de autor
© All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca DOCX, PDF, TXT sau citiți online pe Scribd

POINTERI

Pointerii reprezintă cea mai puternică caracteristică a limbajului C/C++, permiţând programatorului
să acceseze direct conţinutul memoriei, pentru a eficientiza astfel gestiunea memoriei; programul şi datele
sale sunt păstrate în memoria RAM ( Random Access Memory ) a calculatorului.
În acelaşi timp, pointerii reprezintă şi cel mai complex şi mai dificil subiect al limbajului C/C++,
tocmai datorită libertăţilor oferite de limbaj în utilizarea lor.
Prin utilizarea corectă a pointerilor se poate îmbunătăţi drastic eficienţa şi performanţele
programului.
Pe de altă parte, utilizarea lor incorectă duce la apariţia multor probleme, de la cod greu de citit şi
de întreţinut la greşeli penibile de genul pierderi de memorie sau depăşirea unei zone de date.
Utilizarea incorectă a pointerilor poate expune programul atacurilor externe (hacking).
Multe limbaje noi (Java, C#) au eliminat pointerii din sintaxa lor pentru a evita neplăcerile cauzate
de aceştia.

Pointerii sunt variabile care contin adresa unei alte zone de memorie.

În limbajul C tipurile pointer se folosesc în principal pentru:


 declararea şi utilizarea de vectori, mai ales pentru vectori ce conţin şiruri de caractere;
 parametri de funcţii prin care se transmit rezultate (adresele unor variabile din afara funcţiei);
 acces la zone de memorie alocate dinamic şi care nu pot fi adresate printr-un nume;
 parametri de funcţii prin care se transmit adresele altor funcţii.

Sintaxa utilizata pentru declararea lor este:

tip *variabila_pointer;

Exemplu:

int i = 17, j = 3; // declaratie variabile de tip int

int *p; // declaratie pointer spre int

In lucrul cu pointeri se folosesc doi operatori unari:


&: extragerea adresei unei variabile
*: referirea continutului zonei de memorie indicate de pointer (indirectare)
Exemplu:

int i, j; Variabila p i j

i = 17, j = 20; Continut ? 17 20

int *p; Adresa 0x28fefc 0x28fef8 0x28fef4

Variabila p i j
p ia adresa lui i
p = &i; Continut 0x28fef8 17 20

Adresa 0x28fefc 0x28fef8 0x28fef4


modificarea continutului Variabila p i j
zonei de memorie referite
de p Continut 0x28fef8 6 20

(*p) = 6; Adresa 0x28fefc 0x28fef8 0x28fef4

Operatiile permise asupra pointerilor sunt urmatoarele:


• extragerea obiectului referit de catre pointer folosind operatorul * sau operatorul []
• extragerea adresei unui pointer folosind operatorul & (se va obtine un pointer la pointer)
• atribuirea intre doi pointeri care refera acelasi tip de data
• incrementarea/decrementarea (va muta pointerul inainte/inapoi cu un numar de bytes egal cu
dimensiunea tipului referit)
• adunarea/scaderea cu o valoare intreaga (va muta pointerul inainte/inapoi cu un numar de bytes
egal cu dimensiunea tipului referit inmultita cu valoarea intreaga)
• diferenta a doi pointeri de acelasi tip (se obtine numarul de elemente de tipul respectiv ce incap intre
cei doi pointeri)
• compararea a doi pointeri
• conversia pointerilor (se realizeaza ca si pentru celelalte tipui folosind operatorul de cast)

Operaţii relaţionale cu pointeri


1. Compararea a doi pointeri se poate face utilizând operatorii cunoscuţi:
== != < > <= >=

2. Aritmetica pointerilor:

p++; // p=p+sizeof(tip);

p--; // p=p-sizeof(tip);

p = p+c; // p=p+c*sizeof(tip);

p = p-c; // p=p-c*sizeof(tip);

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