Tipuri de date derivate - ERASMUS PulseInitializarea fiind identica cu cea din exemplul anterior...

13
Tipuri de date derivate Tipuri predefinite: tipuri de date la care utilizatorul poate stabili numai anumiti parametrii (dimeniuni, tip de baza, etc); modul de organizare al datelor fiind predefinit. Tablouri ointeri Referinte Tipuri definite de utilizator: tipuri de date la care utilizatorul stabileste toate detaliu de implementare: continutul, organizarea datelor, etc. Structuri Uniuni Clase

Transcript of Tipuri de date derivate - ERASMUS PulseInitializarea fiind identica cu cea din exemplul anterior...

Page 1: Tipuri de date derivate - ERASMUS PulseInitializarea fiind identica cu cea din exemplul anterior Daca la initilizare nu sunt date toate elementele, atunci restul sunt initializate

Tipuri de date derivate

• Tipuri predefinite: tipuri de date la care utilizatorul poate stabili

numai anumiti parametrii (dimeniuni, tip de baza, etc); modul de

organizare al datelor fiind predefinit.

– Tablouri

– ointeri

– Referinte

• Tipuri definite de utilizator: tipuri de date la care utilizatorul

stabileste toate detaliu de implementare: continutul, organizarea

datelor, etc.

– Structuri

– Uniuni

– Clase

Page 2: Tipuri de date derivate - ERASMUS PulseInitializarea fiind identica cu cea din exemplul anterior Daca la initilizare nu sunt date toate elementele, atunci restul sunt initializate

Tablouri (array)

= colectie de obiecte avand acelasi tip de date, organizate dupa un rastru (grid) n dimensional.

- Apelarea elementelor se face prin intermediul indecsilor, un indexpentru fiecare dimensiune (axa de indexare)

- Indexarea elementelor se face de la 0…dim-1

Sintaxa definitie: Tip_date nume_tablou[dim1][dim2]…

in care dim1, dim2… sunt constante intregi

Ex.: int a[2][3];

Tipuri de date derivate. Tipuri predefinite. Tablouri.

Page 3: Tipuri de date derivate - ERASMUS PulseInitializarea fiind identica cu cea din exemplul anterior Daca la initilizare nu sunt date toate elementele, atunci restul sunt initializate

Alocarea memorie

Indiferent de numarul de dimensiuni, în cazul alocarii statice:

tablourile sunt alocate in spatiu de memorie compact, elementelefiind parcurse prin liniarizare, variind indecsii dimensiunilor de la

dreapta (exterior) catre stanga (nume_tablou)

Ex.: int a[2][3][4];

In memorie, elementele sunt asezate la adrese succesive (la rand) in ordinea:

a[0][0][0],a[0][0][1],a[0][0][2],a[0][0][3],a[0][1][0],a[0][1][1],

a[0][1][2],a[0][1][3],a[0][2][0],a[0][2][1],a[0][2][3],a[1][0][0],

a[1][0][1],a[1][0][2],a[1][0][3],a[1][1][0],a[1][1][1],a[1][1][2],

a[1][1][3],a[1][2][0],a[1][2][1],a[1][2][3]

Tipuri de date derivate. Tipuri predefinite. Tablouri.

Page 4: Tipuri de date derivate - ERASMUS PulseInitializarea fiind identica cu cea din exemplul anterior Daca la initilizare nu sunt date toate elementele, atunci restul sunt initializate

Initializare tablouri

Un tablou nu se intializeaza implicit la definitie (conform sintaxei date anterior). Intr-o astfel de situaltie valorile stocate sunt aleatoare(conform initializarii memoriei la pornirea calculatorului)

Un tablou se poate initializa la definitie prin insiruirea valorilorelementelor sale, conform sintaxei:

TipData NumeTablou[dim1][dim2][...]=

{{val01,val02,..},{val10,val11,..},{...}..};

Ex.: int a[2][3]={{1,2,3},{4,5,6}};

Tema: sa se initializeze tabloul: int a[2][3][4];

Tipuri de date derivate. Tipuri predefinite. Tablouri.

Page 5: Tipuri de date derivate - ERASMUS PulseInitializarea fiind identica cu cea din exemplul anterior Daca la initilizare nu sunt date toate elementele, atunci restul sunt initializate

Initializare tablouri

Se mai poate initializa un tablou prin insiruirea valorilor, fara a tine seama de indexari, ordinea in care se asociaza valorilor fiind cea in care sunt stocate elementele in memoria calculatorului:

Ex.: int a[2][3]={1,2,3,4,5,6};

Initializarea fiind identica cu cea din exemplul anterior

Daca la initilizare nu sunt date toate elementele, atunci restul suntinitializate implicit cu zero

int a[2][3]={0}; Reprezinta un tablou initializat tot cu 0

Tipuri de date derivate. Tipuri predefinite. Tablouri.

Page 6: Tipuri de date derivate - ERASMUS PulseInitializarea fiind identica cu cea din exemplul anterior Daca la initilizare nu sunt date toate elementele, atunci restul sunt initializate

Sirurile de caractere

= caz particular de tablou cu 1 dimensiune, cu tip de baza char

Dimensiunea trebuie sa fie mai mare cu 1 decat cea dorita, pentru stocarea terminatorului de sir ‘\0’

Tipuri de date derivate. Tipuri predefinite. Tablouri.

Page 7: Tipuri de date derivate - ERASMUS PulseInitializarea fiind identica cu cea din exemplul anterior Daca la initilizare nu sunt date toate elementele, atunci restul sunt initializate

Pointeri

= variabila in care se poate stoca adresa unei zone de memorie;

tipul variabilei stocate la respectiva adresa se numeste tip de baza al pointerului.

Sintaxa, operatori: int *a //declaratie/definitie pointer int b;

a=&b; //operator de referentiere (adresare) b=*a; //operator de dereferentiere (indirectare)

Obs.: Numele unui tablou este pointer constant (adresa) la primulelement al tabloului.

Tipuri de date derivate. Tipuri predefinite. Pointeri.

Page 8: Tipuri de date derivate - ERASMUS PulseInitializarea fiind identica cu cea din exemplul anterior Daca la initilizare nu sunt date toate elementele, atunci restul sunt initializate

Obs.: void *nume este pointer fara tip de baza (se poate stoca o

adresa, insa nu se stie tipul variabilei stocate acolo; nu . functioneaza artimetica pointerilor); se poate folosi numai prin

conversie la un tip concret de date

Tipuri de date derivate. Tipuri predefinite. Pointeri.

Page 9: Tipuri de date derivate - ERASMUS PulseInitializarea fiind identica cu cea din exemplul anterior Daca la initilizare nu sunt date toate elementele, atunci restul sunt initializate

Aritmetica pointerilor: in general asupra pointerilor se pot aplicaoperatiile pentru intregi, insa unitatea de modificare estedimensiunea tipului de baza

Ex.: int *a

int b[5]={1,2,3,4,5}; // initializare vector

a=&b;

a++;

cout << *a << endl;

b [ 0 ] b [ 1 ] b [ 2 ] b [ 3 ] b [ 4 ]

Tipuri de date derivate. Tipuri predefinite. Pointeri.

Page 10: Tipuri de date derivate - ERASMUS PulseInitializarea fiind identica cu cea din exemplul anterior Daca la initilizare nu sunt date toate elementele, atunci restul sunt initializate

Alocarea / dealocare memoriei:

• Ca in C folosind functiile malloc , respectiv free

• In C++ exista operatori proprii: new, respectiv delete

pentru alocare multipla (vector) eliberarea spatiului se face cu operatorul delete[]

Sintaxa: numePointer = new tipBaza; delete numePointer;

pentru vectori: numePointer = new tipBaza[dim]; delete[] numePointer;

Ex.: int *a, *b;

a=new int; // alocare memorie pentru un singur obiect

b=new int[5]; // alocare memorie pentru mai multe obiecte

delete a; // eliberare memorie pentru un singur obiect

delete[] b;//eliberare memorie pentru mai multe obiecte alocate

Tipuri de date derivate. Tipuri predefinite. Pointeri.

Page 11: Tipuri de date derivate - ERASMUS PulseInitializarea fiind identica cu cea din exemplul anterior Daca la initilizare nu sunt date toate elementele, atunci restul sunt initializate

Referinte

= nume alternativ asociat unui obiect deja existent

Obs.: cum nu poate exisa un nume fara variabila asociata, orice referinta trebuie initializata la declarare

Sintaxa: TipDate & nume=varInit;

Ex.: int a=6; a,r

int &r=a;

int x=r; x

r++;

6

6

Tipuri de date derivate. Tipuri predefinite. Referinte.

Page 12: Tipuri de date derivate - ERASMUS PulseInitializarea fiind identica cu cea din exemplul anterior Daca la initilizare nu sunt date toate elementele, atunci restul sunt initializate

Referinte

= nume alternativ asociat unui obiect deja existent Obs.: cum nu poate exisa un nume fara variabila asociata,

orice referinta trebuie initializata la declarare

Sintaxa: TipDate & nume=varInit;

Ex.: int a=6; a,r

int &r=a;

int x=r; x

r++;

Diferenta pointer - referintaa,r

int a=6;

int &r=a; P

int *p=&a;

6

6

6

adrSe aloca memorie,Se stocheaza adr

Tipuri de date derivate. Tipuri predefinite. Referinte.

Page 13: Tipuri de date derivate - ERASMUS PulseInitializarea fiind identica cu cea din exemplul anterior Daca la initilizare nu sunt date toate elementele, atunci restul sunt initializate

Care este diferența dintre

const int* p;

Definește/declara un pointer la obiect constant

=> se blochează modificarea valorii stocate în obiect

se poate modifica valoareapointerului

Exemplu:int a[3]={1,2,3};

const int* pv=&a[0];

pv[0]=4;// gresit, ob const

pv++; // corect

cout<<pv[1];

const Pointer vs. Pointer const

int* const p;

Definește/declara un pointer constant la obiect

=> se blochează modificarea valorii pointerului

se poate modifica valoarea stocată în obiect

Exemplu:int a[3]={1,2,3};

int* const pv=&a[0];

pv[0]=4; // corect

pv++; // gresit, pointer const

pv[2]=5; // ??

cout<<pv[1];

Tipuri de date derivate. Tipuri predefinite. Pointeri.