CATEGORII DOCUMENTE |
Introducerea structurilor in functii
a) Introducerea elementelor unei structuri in functii
Cand un element al unei variabile tip structura este transmis (pasat) unei functii, de fapt este transmisa valoarea acelui element.
Exemplu:
struct struct1 struct2;
Modalitatea de a introduce fiecare element intr-o functie este urmatoarea:
func (struct2.x);
/* se paseaza valoarea caracterului x */
func2 (struct2.y);
/* se paseaza valoarea intregului y */
func3 (struct2.z);
/* se paseaza valoarea reala a lui z */
func4 (struct2.s);
/* se utilizeaza adresa sirului s */
func (struct2.s[2]);
//se utilizeaza valoarea caracterului lui s[2]
unde func(), func2(), func3(), func4() sunt numele unor functii.
Pentru a transmite functiei func() adresele elementelor din structura struct2, se scrie astfel:
func (&struct2.x); /* se paseaza adresa caracterului x */
func (&struct2.s[2]); /* se paseaza adresa caracterului s[2] */
b) Transmiterea unei intregi structuri unei functii
Cand o structura este utilizata ca argument al unei functii, limbajul C transmite functiei intreaga structura utilizand metoda standard a apelului prin valoare. Aceasta inseamna ca orice modificare asupra continutului structurii in interiorul functiei in care este apelata structura, nu afecteaza structura folosita ca argument.
Ceea ce trebuie avut neaparat in vedere atunci cand, ca parametru, se utilizeaza o structura este ca tipul argumentului sa fie identic cu tipul parametrului.
Exemplu:
# include <stdio.h>
void f1();
void main() arg;
arg.a = 1000;
f1(arg); /* se apeleaza functia f1() */ }
void f1(param) /* se declara functia f1 */
struct param;
Acest program declara atat argumentul arg al lui f1, cat si parametrul param ca avand acelasi tip de structura. Programul va afisa pe ecran valoarea 1000.
Pentru a face programele mai compacte se procedeaza la definirea structurii ca variabila globala si apoi la utilizarea numelui acesteia pentru a declara diversele variabile structura.
Exemplu:
# include <stdio.h>
void f1();
/* Se defineste un tip structura */
struct struct_tip ;
void main()
void f1(struct struct_tip param) /* se declara functia f1() */
Pentru exemplificare, propunem urmatorul program:
se preia de la tastatura un prim sir de numere intregi
se preia de la tastatura un al doilea sir de numere intregi
se concateneaza cele doua siruri
sirul rezultat se sorteaza in ordine crescatoare, avand in vedere ca primele pozitii sa fie ocupate de numerele pare din sir sortate crescator dupa care sa urmeze numerele impare din sir sortate tot crescator.
Pentru a realiza acest program, vom utiliza nu variabile de tip sir ci o structura care sa contina ca prim element sirul respectiv iar cel de-al doilea element sa fie lungimea acestuia. Se vor construi functii care sa realizeze citirea sirurilor de la tastatura, scrierea lor pe display, respectiv sa le ordoneze si sa le sorteze dupa paritate. Toate aceste functii comunica prin intermediul unei variabile globale de tip structura si a mai multor variabile locale de tip structura.
Programul in C este prezentat in continuare:
# include <stdio.h>
// definim prototipurile functiilor utilizate
struct sir_lung cit_sir();
struct sir_lung concat_sir();
struct sir_lung ord_sir();
struct sir_lung par_sir();
struct sir_lung impar_sir();
void tip_sir();
/* se defineste structura sir+lungime si variabila globala sir */
struct sir_lung sir;
// programul principal
void main()
// se definesc functiile
struct sir_lung cit_sir()
sir.lung=--i;
return sir;}
void tip_sir(struct sir_lung sirf)
struct sir_lung concat_sir(struct sir_lung sir1, struct sir_lung sir2)
struct sir_lung ord_sir(struct sir_lung sir1)
return sir=sir1;}
struct sir_lung par_sir(struct sir_lung sir1)
sir_par.lung=j;
return sir=sir_par;}
struct sir_lung impar_sir(struct sir_lung sir1)
sir_impar.lung=j;
return sir=sir_impar;}
Din functia cit_sir() se poate iesi prin tastarea oricarui caracter nenumeric. Se observa cum aceasta functie lucreaza direct cu variabila globala sir iar celelalte cu variabile locale proprii care apoi sunt asignate variabilei globale sir la returnare.
Ruland programul vom obtine rezultatele:
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 673
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved