Scrigroup - Documente si articole

     

HomeDocumenteUploadResurseAlte limbi doc
AccessAdobe photoshopAlgoritmiAutocadBaze de dateCC sharp
CalculatoareCorel drawDot netExcelFox proFrontpageHardware
HtmlInternetJavaLinuxMatlabMs dosPascal
PhpPower pointRetele calculatoareSqlTutorialsWebdesignWindows
WordXml


Operatii cu pointeri

c



+ Font mai mare | - Font mai mic



Operatii cu pointeri

Asupra pointerilor se pot face diferite operatii. Deoarece ei contin adrese atunci operatiile se realizeaza cu adrese.



1. Incrementare si decrementare

Operatorii de incrementare si decrementare se pot aplica variabilelor de tip pointer.

Efectul:

operatorul de incrementare aplicat asupra unui operand de tip pointer spre tipul tip mareste adresa continuta de operand cu numarul de octeti necesari pentru a pastra o data de tipul tip

operatorul de decrementare se executa in mod analog, cu singura diferenta ca in loc sa se mareasca adresa, ea se micsoreaza cu numarul corespunzator de octeti.

De obicei decrementarile si incrementarile adreselor sunt mai rapide ca executie cand se au in vedere prelucrari de tablouri.

Exemplu:

int tab[10];

int *p;

int i=0;

p=&tab[i];

p++; // p contine adresa lui tab[1]

// cu p se pot face referiri la orice element de tablou

2. Adunarea si scaderea unui intreg dintr-un pointer

Daca p este un pointer, sunt corecte expresiile de forma:

p+n si p-n

unde n este de tip intreg.

Efectul:

expresia p+n mareste valoarea lui p cu n*nr_tip, unde nr_tip este numarul de octeti necesari pentru a memora o data de tipul tip spre care pointeaza p;

analog expresia p-n micsoreaza valoarea lui p cu n*nr_tip.

Daca x este un tablou de tipul tip, atunci x este pointer, deci o expresie de forma:

x+n;

este corecta si deoarece x este un pointer spre primul sau element x[0], x+n va fi un pointer spre elementul x[n]. Rezulta ca valoarea elementului x[n] se poate reprezenta prin expresia:

*(x+n);

Astfel variabilele cu indici se pot inlocui prin expresii cu pointeri. Aceasta permite ca la tratarea tablourilor sa se foloseasca expresii cu pointeri in locul variabilelor cu indici. Versiunile cu pointeri sunt de obicei optime in raport cu cele realizate prin intermediul indicilor.

3. Compararea a doi pointeri

Doi pointeri care pointeaza spre elementele aceluiasi tablou pot fi comparati folosind operatorii de relatie si de egalitate. Astfel, daca p si q sunt doi pointeri care pointeaza spre elementele tab[i], respectiv tab[j] ale tabloului tab, expresiile urmatoare au sens:

p<q p!=j p= =q.

Observatii:

1o. Pointerii nu pot fi comparati decat in conditiile amintite mai sus (deci daca sunt pointeri spre elementele aceluiasi tablou).

2o. Operatorii = = si != permit compararea unui pointer si cu o constanta simbolica speciala avand numele NULL. Aceste comparatii permit sa stabilim daca un pointer contine o adresa sau nu. Astfel, daca expresia:

p= = NULL

este adevarata, p nu contine o adresa. Daca expresia respectiva are valoarea fals atunci p contine o adresa. Constanta simbolica NULL este definita in fisierul stdio.h

4. Diferenta a doi pointeri

Doi pointeri care pointeaza spre elementele aceluiasi tablou pot fi scazuti. Rezultatul diferentei a doi pointeri este definit astfel: fie t un tablou de un tip oarecare si p si q doi pointeri, p contine adresa elementului t[i] iar q contine adresa elementului t[i+n]. Atunci diferenta q-p are valoarea n.

5. Exemple

Vom da cateva functii asupra sirurilor de caractere:

functia lungime

unsigned lungime (char*x)

functia copiaza

void copiaza(char *x, char *y) // copiaza din zona de adresa y

// in zona de adresa x

functia concateneaza

void concateneaza (char *x, char *y)

// concateneaza sirul de adresa y la sfarsitul sirului

// de adresa x

functia compara

int compara (char *x, char *y)



Politica de confidentialitate | Termeni si conditii de utilizare



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 852
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved