Scrigroup - Documente si articole

Username / Parola inexistente      

Home Documente Upload Resurse Alte 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





DOCUMENTE SIMILARE

Trimite pe Messenger
STRUCTURI DE DATE EXTERNE - SPECIFICUL DATELOR PE SUPORT EXTERN
Structura de tip coada
crearea unei liste predefinite cu 2 elemente
Structura unui program C
Functii de tratare a erorilor
Limbajul C standard (Nivel I)
O colectie de programe utile
Working with Triggers: Trigger Init, RunTrigger
Pointeri pe caractere si functii
Initializarea modului grafic

TERMENI importanti pentru acest document

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



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 560
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 2022 . All rights reserved

Distribuie URL

Adauga cod HTML in site