Sunteți pe pagina 1din 12

Tipuri dinamice de date.

Pointeri
1. Structura memoriei la execuția unui program
2. Operatori specifici
3. Declarare şi iniţializare
4. Operaţii cu pointeri
5. Legătura dintre pointeri şi masive
6. Alocarea dinamică a memoriei
7. 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
2. Operatori specifici
Nume Simbol Rol Utilizare
Operator de * Definirea de tipuri de tip*
referenţiere dată pointer void*
Operator de & “Extrage” adresa unei &nume
referenţiere variabile
Operator de * Accesează conţinutul *nume
dereferenţiere zonei de memorie
indicată de un pointer
3. Declarare şi iniţializare
 short int *p, a, *q;  short int *p; short int a; short int *q;
 p = &a;
 q = p; p a q

 *q = 7;
7

 struct punct {float x,y;}* x; //sizeof (x) =?; sizeof(punct)=?


 void* p;
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);
 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 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:
a)*++p;
b)*p++;
c) (*p)++;
d)--*p;
e)++*--p;
Răspuns:
a) *++p; //preincrementeaza pointerul si apoi extrage
continutul
b)*p++; extrage continutul, apoi postincrementare de pointer
c) (*p)++; extrage continutul, apoi postincrementare continut
d)--*p; predecrementare continut
e) ++*--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

S-ar putea să vă placă și