Függvények a C nyelvben 1 Függvényeket a következő esetekben szokás írni: Ha ugyanazt a tevékenységet többször is el kell végeznünk ugyanolyan típusú, de más-más értéket felvevő változóval. Ha ugyanazt a tevékenységet többször is el kell végeznünk ugyanolyan típusú, de más-más értéket felvevő változóval. Ha a programunkat struktúráltan, jól olvashatóan szeretnénk megírni. Ez nagyon fontos a későbbi módosíthatóság miatt. Ha a programunkat struktúráltan, jól olvashatóan szeretnénk megírni. Ez nagyon fontos a későbbi módosíthatóság miatt. A deklaráció szintaxisa: visszatérési_érték_típusa fvnév (típus1 vált1, típus2 vált2,…) { a függvény teste return v1; } Függvények A függvény visszatérési értékét tartalmazó változó
Függvények a C nyelvben 2 #include #include int osszeg(int a,int b) { int s; int s; s=a+b; s=a+b; return s; return s;}main(){ int x=5,y=8,z,c; int x=5,y=8,z,c; z=osszeg(10,16); z=osszeg(10,16); printf("x=%d y=%d\n",x,y); c=osszeg(x,y); c=osszeg(x,y); printf("z=%d\nc=%d\n",z,c); printf("z=%d\nc=%d\n",z,c); getch(); getch();} Példa egy összegző függvényre (a paraméterátadás érték szerint történik) Formális paraméterek Aktuális paraméterek
Függvények a C nyelvben 3 #include-ok … void csere(int *m, int *n) /* ha a fv-nek nincs visszatérési értéke, akkor típusa void */ { int p; int p; p=*m; p=*m; *m=*n; *m=*n; *n=p; *n=p;}main(){ int x=5,y=8,z,c,t; int x=5,y=8,z,c,t; printf("x=%d y=%d\n",x,y); printf("x=%d y=%d\n",x,y); csere(&x,&y); /* ennél a függvényhívásnál cím szerinti paraméterátadás történik */ csere(&x,&y); /* ennél a függvényhívásnál cím szerinti paraméterátadás történik */ printf("x=%d y=%d\n",x,y); getch(); getch();} Példa a csere függvényre (a paraméterátadás cím szerint történik) Az m egész típusú változóra mutató pointer Az x és y változók memóriabeli címeit cseréljük fel.
Függvények a C nyelvben 4 A lokális változókat csak azok a blokkok látják, ahol deklarálva lettek. Ez alól a main( ) sem kivétel. Ezek a változók a veremben tárolódnak, tehát minden függvényhíváskor törlődik az értékük. A globális változókat minden függvény látja, értéküket módosíthatja. Ezeket a változókat minden függvény törzsén kívül kell deklarálni, célszerűen rögtön a #define vagy #include… után, még az első függvény előtt, beleértve a main( )-t is. A globális változókat minden függvény látja, értéküket módosíthatja. Ezeket a változókat minden függvény törzsén kívül kell deklarálni, célszerűen rögtön a #define vagy #include… után, még az első függvény előtt, beleértve a main( )-t is. Lokális és globális változók
Függvények a C nyelvben 5 #include #include int z=11; void valami( ) { int a=13; int a=13; printf("z=%d\na=%d\n",z,a); printf("z=%d\na=%d\n",z,a); /*printf("k*z=%d\n",k*z);*/ /*printf("k*z=%d\n",k*z);*/} main( ) { int k=100; int k=100; valami( ); valami( ); printf("z*k=%d",z*k); printf("z*k=%d",z*k); getch( ); getch( );} Példa lokális és globális változókra Globális változó deklarálása Lokális változó deklarálása Ez a sor hibás, mert nem ismeri k változót
Függvények a C nyelvben 6 A statikus változókat csak egyszer hozza létre a fordító és értéket is csak egyszer kapnak, a legelső függvényhíváskor, értékét a program futása során végig megtartja. A statikus változókat csak egyszer hozza létre a fordító és értéket is csak egyszer kapnak, a legelső függvényhíváskor, értékét a program futása során végig megtartja. Pl.: static int c=5; Az automatikus változók minden függvényhíváskor újra deklarálódnak, és mindig felveszik a megadott kezdőértéket. (Lényegében a hagyományosan létrehozott változók automatikusak.) Az automatikus változók minden függvényhíváskor újra deklarálódnak, és mindig felveszik a megadott kezdőértéket. (Lényegében a hagyományosan létrehozott változók automatikusak.) Pl.:auto int d=3; vagy int d=3; Automatikus és statikus változók
Függvények a C nyelvben 7 #include #include void demo( ) void demo( ) { static int a=0; static int a=0; auto int b=0; auto int b=0; printf("a=%d b=%d\n",a,b); printf("a=%d b=%d\n",a,b); a++; b++; a++; b++; } main( ) main( ) { int i; int i; for(i=0;i<3;i++) for(i=0;i<3;i++) demo( ); demo( ); getch( ); getch( ); } Példa automatikus és statikus változókra Statikus változó deklarálása Automatikus változó deklarálása A programfutás eredménye: a=0 b=0 a=1 b=1 a=2 b=2