Descărcați ca ppt, pdf sau txt
Descărcați ca ppt, pdf sau txt
Sunteți pe pagina 1din 17

Operaii cu pointeri

Operatori care se aplic asupra pointerilor

Operatori specifici pointerilor


Nume Operator de refereniere Simbol * Rol Definirea de tipuri de dat pointer Extrage adresa unei variabile Acceseaz zona de memorie indicat de un pointer Utilizare tip * float* int* int** &a

Operator de refereniere

&

Operator de derefereniere

*p

05.06.2013

Operatori specifici pointerilor


int* p, a, *q;

p = &a;
q = p; *q = 7; p
100 104

a
106

q 104

104

05.06.2013

Atribuire
Operatorul de atribuire = Numai ntre pointeri de acelai tip int *p, *q; float *r, *s; p = q; r = s; p = r; s = q;
05.06.2013 4

Operaii aritmetice cu pointeri


Unitate: dimensiunea zonei de memorie ctre care indic pointerul
noiunea e definit doar pentru pointerii cu tip

int *p, a; p = &a; float *q, b; q = &b;

p
100 104

a
100

p
104

05.06.2013

Incrementare / decrementare
Modificarea valorii operandului cu o unitate int a, b, c, *p; p = &a; p++; p--;
a
200 202

b
204

c
206

p 202 204

05.06.2013

Incrementare / decrementare
Modificarea valorii operandului cu o unitate float a, b, c, *p; p = &a;
300

a
304

b
308

c
300

p 308 304

p++; p--;

05.06.2013

Adunarea / scderea unui numr ntreg


int a[10], *p, *q; p = &a[0];
a
200 202 204 206 208 210 212 214 216 218

p+5 q = p + 5;
220

p
224

p = q - 2;

200 206

210

p+5

05.06.2013

Adunarea / scderea unui numr ntreg


float a[10], *p, *q; p = &a[0];
a
200 204 208 212 216 220 224 228 232 236

p+5 q = p + 5;
240

p
244

p = q - 2;

200 212

220

p+5

05.06.2013

Operatori relaionali
Toi operatorii relaionali: <, >, <=, >=, ==, != Valoarea nul pentru pointeri (pointerul nul)
NULL

Pointer nul neiniializat


Atenie: nu se poate dereferenia un pointer nul!
int *p; if( p == NULL ) //nul, nu se poate lucra cu el else //nenul, poate fi accesat zona indicat de el if( !p)

05.06.2013

10

Alocarea dinamic a memoriei


Se include
malloc.h (Visual C)

Funcii importante
malloc tip *p; p = (tip*) malloc(dimensiune); free free(p);

05.06.2013

11

Alocarea dinamic a memoriei


int *p; float *q; p = ( int* ) malloc (sizeof(int)); *p = 33; q = ( float* ) malloc (sizeof(float)); free(p);

SD / SS

Heap

1000

33 p
100 104

q 7400
7400

1000

05.06.2013

12

Legtura dintre vectori i pointeri


a

int a[10]; int *p;


a 200

200

202

204

206

208

210

212

214

216

p
220

200

p+5

a+5

p = a; a = p;

*(a+5) a+5 a[5] *(p+5) p+5 p[5]

p = a + 6;

p[0]

p[2]

05.06.2013

13

Legtura dintre matrice i pointeri


0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 0 1 2 3 4

int a[5][5]; int **p;


a

p+3

a+3 *(a+3)+2

p = a;
p[3][2] a[3][2] *(*(p+3)+2) *(p+3) p+3 *(*(a+3)+2) *(a+3)+2 *(a+3) a+3 a[3][0] ???

05.06.2013

14

Vectori alocai dinamic


Vector dinamic Vector dinamic Declarare
tip* p;

Declarare
tip p[dim];

Alocare
-

Alocare
p = (tip*) malloc( n * sizeof(tip));

Utilizare
p[i] -

Utilizare
p[i] free(p);

Eliberare (dezalocare) Eliberare (dezalocare)

05.06.2013

15

Matrice alocate dinamic


tip **p; //*(p+i)
-> adresa liniei cu indicele i (i=0..n-1)

p = (tip**) malloc(n*sizeof(tip*)); for(=0;i<n;i++) p[i] = (tip*) malloc(m*sizeof(tip)); SD / SS


p Adresa liniei 0 Adresa liniei 1 Adresa liniei 2

Heap

p+i
*(p+i)

Adresa liniei i Adresa liniei n-1

*(p+i)+j *(*(p+i)+j) p[i][j]


16

Cum se acceseaz p[i][j] ?


05.06.2013

Spor la nvat!

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