Extras din laborator
LUCRAREA 9
Scopul lucrarii îl constituie prezentarea tipurilor de date neomogene (structurile),
utilizarea operatorului typedef în contextul structurilor, pointerii la structuri si constructia unui tip abstract de data, lista.
I. OBSERVATII TEORETICE
1.1. Structuri
1.1.1. Utilitate
Daca vectorii au utilitate mai ales în cazul sirurilor de caractere (v. Laborator 8), unde multimea omogena este esentiala, structurile sunt foarte potrivite în situatiile în care trebuie memorate împreuna caracteristici diferite ale unui anumit obiect. De exemplu Numele, Prenumele, Adresa si DataNastere sunt patru caracteristici de tipuri diferite de date ale aceluiasi obiect, Persoana.
O înlantuire de astfel de obiecte formeaza o clasa de obiecte, iar modelarea sa se poate face în C cu ajutorul structurilor de date de tip lista. Acest subiect este tratat în detaliu în semestrul 2 al anului întâi.
Fiecare element al unei structuri poarta denumirea de câmp.
Exemplu:
...
struct Persoana
{
char Nume[24] ;
char Prenume[32] ;
char Adresa[64] ;
int ZiNastere ;
char LunaNastere[12] ;
int AnNastere ;
};
În acest prim exemplu, folosind cuvântul-cheie struct, compilatorul va recunoaste corect acest tip de data. Dupa cum vedeti, într-un acelasi spatiu de memorie, identificat cu un nume (aici Persoana) sunt stocate (salvate) sase câmpuri, de tipuri diferite.
Pentru a declara variabile de tip structura, sintaxa este urmatoarea:
struct Persoana pers1, pers2 ;
Aici au fost declarate doua variabile, pers1 si pers2, de tipul structurii Persoana.
Observatie:
Daca se omite identificatorul structurii, anume Persoana, atunci declaratia anterioara nu are sens, si este marcata cu eroare din partea compilatorului.
1.1.2. Spatiul rezervat
Pentru a putea face alocari dinamice în care sunt implicate structurile, trebuie sa cunoastem spatiul pe care compilatorul îl rezerva acestora.
Ca regula generala, trebuie folosit operatorul sizeof() asupra tipului structura dorit. Dupa cum va reamintiti, sizeof întoarce numarul de octeti (bytes) ai tipului de data asupra caruia se aplica.
Atentie!
Este incorect sa facem singuri suma octetilor fiecarui câmp în parte si astfel sa stabilim numarul total de octeti. Aceasta pentru ca nu se garanteaza ca aceste câmpuri se afla în memorie succesiv. Astfel, pot exista octeti liberi între diferitele câmpuri, si aceasta din cauza eventualelor "alinieri în memorie", sau al optimizarilor din partea compilatorului (set-ari specifice dupa instalare).
1.2. Structurile si definitiile de tipuri
1.2.1. Tipul structura
Daca dorim o utilizare facila a acestui tip special de data, este de preferat varianta în care definim, cu ajutorul typedef, tipul de data structura.
Definitia se face respectând regula typedef: înaintea noului nume de tip, se specifica tipul de data caruia i se atribuie acea noua denumire (alias).
Preview document
Conținut arhivă zip
- Surse_lab1
- B10_16.cpp
- B10_B2.cpp
- B2_B10_i.cpp
- B2_B10_S.cpp
- BAZA10_2.cpp
- BAZAREC.cpp
- Surse_lab10
- LAB10_1.CPP
- LAB10_2.CPP
- LAB10_3.CPP
- LAB10_4.CPP
- LAB10_5.CPP
- LAB10_6.CPP
- lab10_proba.cpp
- Surse_lab11
- LAB11_1.CPP
- LAB11_10.CPP
- LAB11_11.CPP
- LAB11_2.CPP
- LAB11_3.CPP
- LAB11_4.CPP
- LAB11_5.CPP
- LAB11_6.CPP
- LAB11_7.CPP
- LAB11_8.CPP
- LAB11_9.CPP
- Surse_lab2
- lab2_1.c
- lab2_1.cpp
- lab2_2.cpp
- lab2_3.cpp
- lab2_4.cpp
- lab2_5.c
- lab2_5.cpp
- Surse_lab3
- lab3_1.cpp
- lab3_2.cpp
- lab3_3.cpp
- lab3_4.cpp
- lab3_5.cpp
- lab3_6.cpp
- Surse_lab4
- lab4_1.cpp
- lab4_2.cpp
- lab4_2.txt
- lab4_3.cpp
- lab4_4.cpp
- lab4_5.cpp
- Surse_lab5
- functiePutere.cpp
- lab5_1.cpp
- lab5_2.cpp
- lab5_3.cpp
- lab5_4.cpp
- lab5_5.cpp
- lab5_5_1.cpp
- lab5_6.cpp
- lab5_7.cpp
- lab5_8.cpp
- Surse_lab6
- lab6_1.cpp
- lab6_2.cpp
- lab6_3.cpp
- lab6_4.cpp
- lab6_5.cpp
- lab6_6.cpp
- lab6_6_7_nrAleatoare.cpp
- lab6_8.cpp
- Surse_lab7
- lab7_1.cpp
- lab7_2.cpp
- lab7_3.cpp
- lab7_palindrom.cpp
- Surse_lab8
- ALOCARE.C
- lab8_1_pointerNull.cpp
- lab8_2_pointerVoid.cpp
- lab8_3_alocareDinamica1.cpp
- lab8_4_realocareDinamica.cpp
- lab8_alocareVector.cpp
- lab8_ex1.cpp
- lab8_ex4.cpp
- Surse_lab9
- lab9_1.cpp
- lab9_2.cpp
- lab9_3.cpp
- lab9_4.cpp
- lab9_5.cpp
- laborator1.doc
- laborator10.doc
- laborator11.doc
- laborator2.doc
- laborator3.doc
- laborator4.doc
- laborator5.doc
- laborator6.doc
- laborator7.doc
- laborator8.doc
- laborator9.doc