Extras din laborator
Membrii unei structuri pot fi parametrii unei functii. Se pot utiliza si pointeri la structuri , mai ales când acestea sunt folosite ca parametri în functii. Spre exemplu, se poate apela functia f, al carei parametru este adresa de început a unei zone de memorie alocata structurii d astfel:
f(&d)
Functia f va fi declarata astfel:
void f(struct data *pd) unde pd este un pointer la structura data , care la apel se va initializa cu adresa structurii (&d).
Pentru a accesa un membru al ei, utilizam operatorul de selectie indirecta "->" tot cu
prioritate maxima.
Exemplu
pd->an
Acest acces este echivalent cu (*pd).an dar se prefera utilizarea operatorului ->
Deci, pentru a avea acces la membrii unei structuri în corpul unei functii
- se declara functia având parametru pointer spre acea structura
functie( struct nume_structura *nume_parametru_formal)
- apelul se face astfel : functie(&nume_parametru_efectiv)
- iar în corpul functiei se folosesc constructii de genul: nume_parametru_formal->nume_membru
Ca orice tip de data, tipurile structurate pot fi denumite de utilizator si în acest sens se utilizeaza specificatorul typedef astfel:
typedef struct data {
int zi, luna, an;
}DC;
O structura particulara se va declara, în continuare, utilizând tipul DC definit mai sus.
DC d;
care este echivalenta cu declaratia: struct data d;
Se recomanda, pentru lizibilitatea programelor, ca noile nume date de utilizator sa fie scrise
cu majuscule (ex. DC).
Exemplu typedef struct{
double real, imaginar;
} COMPLEX;
Se poate calcula modulul unui numar complex, utilizând urmatoarea functie:
double modul (COMPLEX *a)
{
return (sqrt(a->real * a->real + a->imaginar *a->imaginar));
}
Functia modul a utilizat functia sqrt din biblioteca math.h
Se pot defini tablouri de structuri.
Exemplu
Revenind la structura de tip personal, putem defini un tablou de structuri astfel:
struct personal{
char nume [20];
char init_tata;
char prenume [20];
struct data data_nast, data_ang;
}tab pers[20];
În acest exemplu fiecare element tab_pers[i] este o structura de tip personal.
Daca am fi declarat:
struct personal *tab_pers[20];
atunci tab_pers ar fi fost un tablou de pointeri la structuri. Deci tab_pers[i] este un pointer
la o structura de tip personal.
2. Functii de timp
a) time_t time(time_t *timer);
- returneaza numarul de secunde scurse de la 00:00:00 GMT, 1 ianuarie 1970, memorând valoarea respectiva la adresa timer (cu conditia sa fie diferita de NULL) - alegerea anului 1970 ca referinta s-a facut pentru compatibilitatea cu UNIX (referinta DOS fiind 1980);
- are prototipul în time.h;
- daca se apeleaza în forma time(NULL), valoarea este numai returnata, nu si memorata;
- time_t este definita în time.h ca long (typedef long time_t;);
Exemplu:
time_t *z,x;
char *sir;
z=(time_t*)malloc(sizeof(time_t));
x=time(z);
sir=ctime(z);
printf("timpul scurs este %ld, data este: %sn",x,sir);
...
Preview document
Conținut arhivă zip
- Structuri de date. Functii de timp(cu structuri).doc