tipuri dinamice de date. pointeri
DESCRIPTION
Tipuri dinamice de date. Pointeri. Structura memoriei la execu ția unui program Operatori specifici Declarare şi iniţializare Opera ţ ii cu pointeri Legătura dintre pointeri şi masive Alocarea dinamică a memoriei Modificatorul const. 1. Structura memoriei la execuția unui program. - PowerPoint PPT PresentationTRANSCRIPT
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