Download - Tipuri dinamice de date. Pointeri
![Page 1: Tipuri dinamice de date. Pointeri](https://reader036.vdocumente.com/reader036/viewer/2022082422/568147b5550346895db4fa30/html5/thumbnails/1.jpg)
Tipuri dinamice de date. Pointeri1. Structura memoriei la execuția unui
program2. Operatori specifici3. Declarare şi iniţializare4. Operaţii cu pointeri5. Legătura dintre pointeri şi masive6. Alocarea dinamică a memoriei7. Modificatorul const
![Page 2: Tipuri dinamice de date. Pointeri](https://reader036.vdocumente.com/reader036/viewer/2022082422/568147b5550346895db4fa30/html5/thumbnails/2.jpg)
1. Structura memoriei la execuția unui programS.O. alocă o zonă de memorie programuluiSegmente de memorieHeap
Stivă
Segment de date
Segment de cod
Segment prefix
![Page 3: Tipuri dinamice de date. Pointeri](https://reader036.vdocumente.com/reader036/viewer/2022082422/568147b5550346895db4fa30/html5/thumbnails/3.jpg)
2. Operatori specificiNume Simbol Rol Utilizare
Operator de referenţiere
* Definirea de tipuri de dată pointer
tip* void*
Operator de referenţiere
& “Extrage” adresa unei variabile
&nume
Operator de dereferenţiere
* Accesează conţinutul zonei de memorie
indicată de un pointer
*nume
![Page 4: Tipuri dinamice de date. Pointeri](https://reader036.vdocumente.com/reader036/viewer/2022082422/568147b5550346895db4fa30/html5/thumbnails/4.jpg)
3. Declarare şi inițializareshort int *p, a, *q; short int *p; short int a; short int *q;
p = &a;
q = p;
*q = 7;
struct punct {float x,y;}* x; //sizeof (x) =?; sizeof(punct)=?
void* p;
p a q
7
![Page 5: Tipuri dinamice de date. Pointeri](https://reader036.vdocumente.com/reader036/viewer/2022082422/568147b5550346895db4fa30/html5/thumbnails/5.jpg)
Pointeri - exemple int* nume; int a; float b;
nume=&a;
nume=&b; //????
void *nume; int a; float b;
nume=&a; nume=&b;
int a, b, c; int *nume1; void *nume2;
b=5; nume1=&a; *nume1=b; c=*nume1+b; nume2=&b;
*nume2=10; //????
c=*nume2; //????
//a=?, b=?, c=?
![Page 6: Tipuri dinamice de date. Pointeri](https://reader036.vdocumente.com/reader036/viewer/2022082422/568147b5550346895db4fa30/html5/thumbnails/6.jpg)
AtribuireOperatorul de atribuire =int *p, *q; float *r, *s;p = q;r = s;p = r; s = q; //????
![Page 7: Tipuri dinamice de date. Pointeri](https://reader036.vdocumente.com/reader036/viewer/2022082422/568147b5550346895db4fa30/html5/thumbnails/7.jpg)
4. Operații cu pointerifloat v[20]; float *p; p=v;Incrementare/decrementarep++; p--; Adunarea/scăderea unui întregp=v+5; p=p-2;Compararea a doi pointerip?v (==, !=, >, <, >=, <=) //NULLDiferenţa dintre doi pointerip-v;
![Page 8: Tipuri dinamice de date. Pointeri](https://reader036.vdocumente.com/reader036/viewer/2022082422/568147b5550346895db4fa30/html5/thumbnails/8.jpg)
5. Legătura dintre pointeri şi masive vectoriint a[10]; int *p;p = a; p=a+6;a = p; //?? matriceint a[5][5]; int **p;p = a;Exemplificări
![Page 9: Tipuri dinamice de date. Pointeri](https://reader036.vdocumente.com/reader036/viewer/2022082422/568147b5550346895db4fa30/html5/thumbnails/9.jpg)
6. Alocarea dinamică a memorieiSe include
malloc.h (Visual C)
Funcţii importante void* malloc(unsigned n); void free(void* p);
Alte funcţii void* calloc(unsigned nr_elem, unsigned dim_elem); void* farmalloc(unsigned long n); void farfree(void* p);
Exemple: alocare vector, matrice, comp. static-dinamic
![Page 10: Tipuri dinamice de date. Pointeri](https://reader036.vdocumente.com/reader036/viewer/2022082422/568147b5550346895db4fa30/html5/thumbnails/10.jpg)
7. Modificatorul constPointer constanttip *const nume;Exemplu: char *const p=“Limbajul C”;p++; --p; //???Pointer la o zonă de memorie constantătip const *nume;Exemplu: char const *p=“Limbajul C”;*p=‘J’; //???
![Page 11: Tipuri dinamice de date. Pointeri](https://reader036.vdocumente.com/reader036/viewer/2022082422/568147b5550346895db4fa30/html5/thumbnails/11.jpg)
Exemple:1. Interpretaţi următoarele expresii:a)*++p; b)*p++; c)(*p)++; d)--*p;e)++*--p;
![Page 12: Tipuri dinamice de date. Pointeri](https://reader036.vdocumente.com/reader036/viewer/2022082422/568147b5550346895db4fa30/html5/thumbnails/12.jpg)
Răspuns:a)*++p; //preincrementeaza pointerul si apoi
extrage continutulb)*p++; extrage continutul, apoi postincrementare
de pointerc)(*p)++; extrage continutul, apoi
postincrementare continutd)--*p; predecrementare continute)++*--p; predecrementare de adresa si
incrementarea continutului de la noua adresa
Notă: *, ++, -- au aceeaşi prioritate şi se asociază de la dreapta spre stânga