Sunteți pe pagina 1din 12

Tipuri dinamice de date.

Pointeri
1. Structura memoriei la execuia unui program
2. Operatori specifici
3. Declarare i iniializare
4. Operaii cu pointeri
5. Legtura dintre pointeri i masive
6. Alocarea dinamic a memoriei
7. Modificatorul const
1. Structura memoriei la execuia
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
refereniere
* Definirea de tipuri de
dat pointer
tip*
void*
Operator de
refereniere
& Extrage adresa unei
variabile
&nume
Operator de
derefereniere
* Acceseaz coninutul
zonei de memorie
indicat de un pointer
*nume
3. Declarare i iniializare
short 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=?
Atribuire
Operatorul de atribuire =
int *p, *q; float *r, *s;
p = q;
r = s;
p = r; s = q; //????
4. Operaii cu pointeri
float v[20]; float *p; p=v;
Incrementare/decrementare
p++; p--;
Adunarea/scderea unui ntreg
p=v+5; p=p-2;
Compararea a doi pointeri
p?v (==, !=, >, <, >=, <=) //NULL
Diferena dintre doi pointeri
p-v;
5. Legtura 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;
Exemplificri



6. Alocarea dinamic a memoriei
Se include
malloc.h (Visual C)
Funcii importante
void* malloc(unsigned n);
void free(void* p);
Alte funcii
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. Interpretai urmtoarele expresii:
a)*++p;
b)*p++;
c)(*p)++;
d)--*p;
e)++*--p;

Rspuns:
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 aceeai prioritate i se asociaz de la
dreapta spre stnga