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;

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

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