Tipuri dinamice de date. Pointeri
description
Transcript of Tipuri dinamice de date. Pointeri
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
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
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
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
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=?
AtribuireOperatorul de atribuire =int *p, *q; float *r, *s;p = q;r = s;p = r; s = q; //????
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;
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
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
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’; //???
Exemple:1. Interpretaţi următoarele expresii:a)*++p; b)*p++; c)(*p)++; d)--*p;e)++*--p;
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