Selles õpetuses õpite funktsiooni argumentidena edastama struktuurimuutujaid. Näiteid kasutades saate funktsiooni struktuurilt tagasi pöörduda.
Sarnaselt sisseehitatud tüüpide muutujatele saate ka struktuurimuutujaid funktsioonile edastada.
Struktuuride edastamine funktsioonidele
Soovitame teil need õpetused ära õppida, enne kui saate teada, kuidas funktsioonidele struktuure edasi anda.
- C struktuurid
- C funktsioonid
- Kasutaja määratud funktsioon
Siit saate teada, kuidas funktsioone struktuure edasi anda
#include struct student ( char name(50); int age; ); // function prototype void display(struct student s); int main() ( struct student s1; printf("Enter name: "); // read string input from the user until is entered // is discarded scanf("%(^)%*c", s1.name); printf("Enter age: "); scanf("%d", &s1.age); display(s1); // passing struct as an argument return 0; ) void display(struct student s) ( printf("Displaying information"); printf("Name: %s", s.name); printf("Age: %d", s.age); )
Väljund
Sisestage nimi: Võlakiri Sisestage vanus: 13 Informatsiooni kuvamine Nimi: Võlakirjade vanus: 13
Siin luuakse struktuuriline muutuja s1 tüüpi struct student
. Muutuja edastatakse display()
funktsioonile display(s1);
lause abil.
Funktsiooni struktuuri tagastamine
Funktsiooni struktuuri tagastamiseks toimige järgmiselt.
#include struct student ( char name(50); int age; ); // function prototype struct student getInformation(); int main() ( struct student s; s = getInformation(); printf("Displaying information"); printf("Name: %s", s.name); printf("Roll: %d", s.age); return 0; ) struct student getInformation() ( struct student s1; printf("Enter name: "); scanf ("%(^)%*c", s1.name); printf("Enter age: "); scanf("%d", &s1.age); return s1; )
Siin getInformation()
nimetatakse funktsiooni s = getInformation();
lause abil. Funktsioon tagastab tüübi struktuuri struct student
. Tagastatud struktuuri kuvatakse main()
funktsioonist.
Pange tähele, et tagastamise tüüp getInformation()
on ka struct student
.
Struktuuri edastamine viitena
Struktureid saate edastada ka viitena (sarnaselt sisestatud tüübi muutujate viitega edastamisele). Soovitame teil enne jätkamist lugeda juhend viite järgi.
Viitamise ajal edastatakse funktsiooni struktuurimuutujate mäluaadressid.
#include typedef struct Complex ( float real; float imag; ) complex; void addNumbers(complex c1, complex c2, complex *result); int main() ( complex c1, c2, result; printf("For first number,"); printf("Enter real part: "); scanf("%f", &c1.real); printf("Enter imaginary part: "); scanf("%f", &c1.imag); printf("For second number, "); printf("Enter real part: "); scanf("%f", &c2.real); printf("Enter imaginary part: "); scanf("%f", &c2.imag); addNumbers(c1, c2, &result); printf("result.real = %.1f", result.real); printf("result.imag = %.1f", result.imag); return 0; ) void addNumbers(complex c1, complex c2, complex *result) ( result->real = c1.real + c2.real; result->imag = c1.imag + c2.imag; )
Väljund
Esimese numbri jaoks sisestage reaalosa: 1.1 Sisestage kujuteldav osa: -2,4 Teise numbri jaoks sisestage reaalne osa: 3.4 Sisestage kujuteldav osa: -3,2 tulemus. Reaalne = 4,5 tulemus. Pilt = -5,6
Ülaltoodud programmis edastatakse addNumbers()
funktsioonile kolm struktuurimuutujat c1, c2 ja tulemuse aadress . Siin antakse tulemus viitega.
Kui tulemuse muutujat sisemuses addNumbers()
muudetakse, main()
muudetakse vastavalt ka funktsiooni sees olevat tulemusmuutujat.