Documente Academic
Documente Profesional
Documente Cultură
Pointeri
1. Structura memoriei la
execuia
unui
program
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
&
&nume
Operator de
derefereniere
Acceseaz coninutul
zonei de memorie
indicat de un pointer
*nume
3. Declarare i
iniializare
short int *p, a, *q;
p = &a;
q = p;
*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;
Atribuire
Operatorul de atribuire =
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;
masive
vectori
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);
dinamic
7. Modificatorul const
Pointer constant
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