140 likes | 430 Views
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.
E N D
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 • S.O. alocă o zonă de memorie programului • Segmente de memorie Heap Stivă Segment de date Segment de cod Segment prefix
p q a 3. Declarare şi iniţializare • short int*p,a, *q; shortint *p; shortint a; shortint *q; • p = &a; • q = p; • *q = 7; • structpunct {float x,y;}* x;//sizeof (x) =?; sizeof(punct)=? • void* p; 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=?
Atribuire • Operatorul de atribuire = int *p, *q; float *r, *s; p = q; r = s; p = r; s = q; //????
4. Operaţii cu pointeri float v[20]; float *p; p=v; • Incrementare/decrementare p++; p--; • Adunarea/scăderea unui întreg p=v+5; p=p-2; • Compararea a doi pointeri p?v (==, !=, >, <, >=, <=) //NULL • Diferenţa dintre doi pointeri p-v;
5. Legătura dintre pointeri şi masive • vectori int a[10];int *p; p = a;p=a+6; a = p;//?? • matrice int a[5][5];int **p; p = a; • Exemplificări
6. Alocarea dinamică a memoriei • Se include malloc.h (Visual C) • Funcţii importante • void* malloc(unsigned n); • void free(void* p); • Altefuncţ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 const • Pointer constant tip *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: • *++p; • *p++; • (*p)++; • --*p; • ++*--p;
Răspuns: • *++p; //preincrementeaza pointerul si apoi extrage continutul • *p++; extrage continutul, apoi postincrementare de pointer • (*p)++; extrage continutul, apoi postincrementare continut • --*p; predecrementare continut • ++*--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