Bazele
Sa ne reamintim rutinele de conversie a datei din capitolul 5. O
data consista din mai multe parti, precum ziua, luna, anul si
probabil ziua din an si numele lunii. Aceste cinci variabile pot
fi toate plasate intr-o singura structura ca aceasta:
struct date
Cuvintul cheie "struct" introduce o structura de date, care
este o lista de declartii cuprinsa intre acolade. Un nume
optional (eticheta) numit "structure tag", poate sa urmeze
cuvintul cheie "struct"(precum date in exemplul de mai sus).
Aceasta eticheta da un nume acestui gen de structura si poate fi
referita in continuare ca prescurtare de declaratie detaliata.
Elementele sau variabilele mentionate intr-o structura sint numite
"membri". Un membru al structurii sau o eticheta a unei structuri
sau o variabila simpla pot avea acelasi nume fara ambiguitate
deoarece se disting prin context. Desigur se va utiliza acelasi
nume doar pentru a defini obiecte in strinsa relatie.
Acolada din dreapta care inchide lista membrilor structurii poate
fi urmata de o lista de variabile ca in exemplul de mai jos:
struct x, y, z;
ceea ce este sintactic analog cu:
int x, y, z;
in sensul ca fiecare declaratie numeste pe x, y, z si z ca
variabile de tipul specificat si aloca spatiu pentru fiecare din
ele.
O declaratie de structura care nu este urmata de o lista de
variabile nu aloca spatiu de memorie ci descrie doar forma
sau organizarea structurii. Daca structura este nominalizata,
numele poate fi utilizat in program pentru atribuirea de
valori structurii. De exemplu:
struct date d;
defineste o variabila d care are o structura de tip
data, si poate fi initializata la un moment dat conform definitiei
sale cu o lista ca mai jos:
struct date d =;
Un membru a unei structuri particulare poate fi referit
intr-o expresie printr-o constructie de forma:
"numestructura.membru"
Operatorul "." din constructia de mai jos leaga numele
membrului de numele structurii. De exemplu pentru a afla un an
bisect din structura d se refera la membrul "year" astfel:
leap = d.year % 4 == 0 && d.year % 100 != 0 || d.year % 400 == 0;
sau pentru a testa numele liniei din membrul "mon"
if (strcmp(d.mon_name, "Aug") == 0) ...
sau pentru a converti numele lunii la litere mici
d.mon_name[0] = lower(d.mon_name[0]);
O structura poate sa cuprinda structuri, de exemplu:
struct person ;
Structura "person" contine doua structuri de tip data ("birthdate"
si "hiredate"). Daca declaram "p" astfel
struct person emp;
atunci o constructie
emp.birthdate.month
se va referi la luna din data nasterii. Operatorul "." asociaza
partea stinga cu dreapta.