struct nume_tip {
tip_data_1 id_membru_1;
tip_data_2 id_membru_2;
tip_data_3 id_membru_3;
.
.
} denumiri_obiecte;
nume_tip
este o denumire pentru tipul structură, denumiri_obiecte
poate fi un set de identificatori valizi de obiecte care sunt de acel tip structură. Între acolade {}
avem o listă cu informațiile membre, fiecare dintre ele fiind precizată cu tip de dată și un identificator.
|
|
produs
, care are doi membri: greutate
și pret
, fiecare de un alt tip de dată fundamental. Această definiție creează un nou tip (produs
), care este apoi folosit pentru a declara trei obiecte (variabile) de acest tip: mar
, banana
și pepene
. Să observăm că, odată definit, tipul produs
poate fi folosit la fel ca orice alt tip de dată fundamental.struct
, înainte de simbolul (;
), câmpul opțional denumiri_obiecte
poate fi folosit pentru a declara mai direct obiecte de acel tip structură. De exemplu, obiectele structură mar
, banana
și pepene
pot fi declarate simultan cu definiția tipului de dată structură:
|
|
denumiri_obiecte
, numele tipului de dată (produs
) devine opțional: struct
necesită fie un nume_tip
fie cel puțin o denumire_obiect
, dar nu neapărat amândouă simultan.produd
) și un obiect de acest tip (mar
, banana
și pepene
). Putem declara mai multe obiecte (ca mar
, banana
și pepene
) cu un singur tip structură (produs
).mar
, banana
și pepene
), putem accesa informațiile membru ale lor direct. Sintaxa pentru aceasta presupune inserarea simbolului punct (.
) între denumirea obiectului și identificatorul membrului. De exemplu, am putea opera cu oricare dintre aceste elemente ca și cum ele ar fi variabile obișnuite declarate cu propriul lor tip de dată:
|
|
mar.greutate
, banana.greutatet
și pepene.greutate
sunt de tip int
, în timp ce mar.pret
, banana.pret
și pepene.pret
sunt de tip double
.
|
|
Tasteaza titlul: Alien Tasteaza anul: 1979 Filmul meu favorit este: 2001 A Space Odyssey (1968) Si al tau este: Alien (1979) |
al_tau.an
este o variabilă validă de tip int
, iar al_meu.titlu
este o variabilă validă de tip string
.al_meu
și al_tau
sunt de același tip (de tipul filme_t
). De exemplu, ambele au fost transmise ca parametru funcției afis_film
ca și cum ar fi fost variabile simple. De aceea, unul dintre avantajele structurilor de date este abilitatea de a ne referi atăt la informațiile membru individual, căt și la întreaga entitate formată de colecția (structura) de date. În ambele cazuri folosim același identificator: numele structurii.
|
|
Tasteaza titlul: Blade Runner Tasteaza anul: 1982 Tasteaza titlul: The Matrix Tasteaza anul: 1999 Tasteaza titlul: Taxi Driver Tasteaza anul: 1976 Ai introdus urmatoarele filme: Blade Runner (1982) The Matrix (1999) Taxi Driver (1976) |
|
|
un_film
este un obiect de tipul structură filme_t
, iar pfilm
este un pointer care pointează către obiecte de tipul filme_t
. De aceea, următoarea secvență de cod este validă:
|
|
pfilm
se obține prin atribuirea adresei obiectului un_film
.->
):
|
|
Tasteaza titlul: Invasion of the body snatchers Tasteaza anul: 1978 Ai tastat: Invasion of the body snatchers (1978) |
->
) este un operator de dereferențiere folosit numai cu pointer către obiecte care au membri. Acest operator servește pentru a accesa membrii unui obiect direct prin adresa lor. De exemplu, în programul de mai sus:
|
|
|
|
pmovie->titlu
și (*pfilm).titlu
sunt valide și accesează membrul titlu
al structurii pointate de un pointer numit pfilm
. Evident, sunt diferite de:
|
|
|
|
titlu
, al obiectului structură pfilm
(dar aici nu este cazul, căci titlu
nu este de tip pointer). Următorul tabel sintetizează posibile combinații de operatori pentru pointeri și pentru membrii unei structuri:Expresie | Ce se evalueaza | Expresie echivalentă |
---|---|---|
a.b | Membrul b al obiectului a | |
a->b | Membrul b al obiectului pointat de a | (*a).b |
*a.b | Valoarea pointată de membrul b al obiectului a | *(a.b) |
|
|
|
|
Previous: Memoria dinamică | Index | Next: Alte tipuri de date |