tipuri dinamice de date. pointeri

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

Upload: paley

Post on 14-Jan-2016

53 views

Category:

Documents


3 download

DESCRIPTION

Tipuri dinamice de date. Pointeri. Structura memoriei la execu ția unui program Operatori specifici Declarare şi iniţializare Opera ţ ii cu pointeri Legătura dintre pointeri şi masive Alocarea dinamică a memoriei Modificatorul const. 1. Structura memoriei la execuția unui program. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Tipuri dinamice de date. Pointeri

Tipuri dinamice de date. Pointeri1. Structura memoriei la execuția unui

program2. Operatori specifici3. Declarare şi iniţializare4. Operaţii cu pointeri5. Legătura dintre pointeri şi masive6. Alocarea dinamică a memoriei7. Modificatorul const

Page 2: Tipuri dinamice de date. Pointeri

1. Structura memoriei la execuția unui programS.O. alocă o zonă de memorie programuluiSegmente de memorieHeap

Stivă

Segment de date

Segment de cod

Segment prefix

Page 3: Tipuri dinamice de date. Pointeri

2. Operatori specificiNume Simbol Rol Utilizare

Operator de referenţiere

* Definirea de tipuri de dată pointer

tip* void*

Operator de referenţiere

& “Extrage” adresa unei variabile

&nume

Operator de dereferenţiere

* Accesează conţinutul zonei de memorie

indicată de un pointer

*nume

Page 4: Tipuri dinamice de date. Pointeri

3. Declarare şi inițializareshort 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

Page 5: Tipuri dinamice de date. Pointeri

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=?

Page 6: Tipuri dinamice de date. Pointeri

AtribuireOperatorul de atribuire =int *p, *q; float *r, *s;p = q;r = s;p = r; s = q; //????

Page 7: Tipuri dinamice de date. Pointeri

4. Operații cu pointerifloat v[20]; float *p; p=v;Incrementare/decrementarep++; p--; Adunarea/scăderea unui întregp=v+5; p=p-2;Compararea a doi pointerip?v (==, !=, >, <, >=, <=) //NULLDiferenţa dintre doi pointerip-v;

Page 8: Tipuri dinamice de date. Pointeri

5. Legătura dintre pointeri şi masive vectoriint a[10]; int *p;p = a; p=a+6;a = p; //?? matriceint a[5][5]; int **p;p = a;Exemplificări

Page 9: Tipuri dinamice de date. Pointeri

6. Alocarea dinamică a memorieiSe 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

Page 10: Tipuri dinamice de date. Pointeri

7. Modificatorul constPointer constanttip *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’; //???

Page 11: Tipuri dinamice de date. Pointeri

Exemple:1. Interpretaţi următoarele expresii:a)*++p; b)*p++; c)(*p)++; d)--*p;e)++*--p;

Page 12: Tipuri dinamice de date. Pointeri

Răspuns:a)*++p; //preincrementeaza pointerul si apoi

extrage continutulb)*p++; extrage continutul, apoi postincrementare

de pointerc)(*p)++; extrage continutul, apoi

postincrementare continutd)--*p; predecrementare continute)++*--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