Utolsó frissítés: 2020. július 27.
Tényleges érvek #
Azokat az érveket, amelyeket a függvényhívásban említünk, tényleges érvnek nevezzük. Például:
func1(12, 23);
itt 12
és 23
a tényleges argumentumok.
A tényleges argumentumok lehetnek konstansok, változók, kifejezések stb.
12 |
func1(a, b); // here actual arguments are variablefunc1(a + b, b + a); // here actual arguments are expression |
Formális argumentumok #
Azokat az argumentumokat, amelyek a függvény definíciójában szerepelnek, formális argumentumoknak nevezzük. A formális argumentumok nagyon hasonlítanak a függvényen belüli helyi változókhoz. A helyi változókhoz hasonlóan a formális argumentumok is megsemmisülnek, amikor a függvény véget ér.
1234 |
int factorial(int n){ // write logic here} |
Itt n
a formális argumentum. A tényleges és formális argumentumokkal kapcsolatos megjegyzendő dolgok.
- A függvényhívásban szereplő tényleges argumentumok sorrendjének, számának és típusának meg kell egyeznie a függvény formális argumentumaival.
- Ha a tényleges és formális argumentumok között típuseltérés van, akkor a fordító megpróbálja a tényleges argumentumok típusát formális argumentumokká alakítani, ha az legális, Ellenkező esetben a formális argumentumnak egy szemét értéket ad át.
- A formális argumentumban végrehajtott változtatások nem befolyásolják a tényleges argumentumokat.
A következő program ezt a viselkedést mutatja be.
1 2 3 4 5 6 7 8 910111213141516171819202122232425 |
#include<stdio.h>void func_1(int);int main(){ int x = 10; printf("Before function call\n"); printf("x = %d\n", x); func_1(x); printf("After function call\n"); printf("x = %d\n", x); // signal to operating system program ran fine return 0;}void func_1(int a){ a += 1; a++; printf("\na = %d\n\n", a);} |
Itt a x
változó értéke 10
a func_1()
függvény hívása előtt, a func_1()
hívása után a x
értéke a main()
függvényen belül még 10
. A func_1()
függvényen belül végrehajtott változtatások nem befolyásolják a x
értékét. Ez azért történik, mert amikor értékeket adunk át a függvényeknek, az értékről másolat készül, és ezt a másolatot adjuk át a formális argumentumoknak. Ezért a formális argumentumok az eredeti érték másolatán dolgoznak, nem pedig magán az eredeti értéken, ezért a func_1()
függvényen belül végrehajtott változtatások nem tükröződnek a main()
függvényen belül. Ezt a folyamatot hívják az argumentumok átadásának a Call by Value használatával, ezt a koncepciót a következő fejezetekben fogjuk részletesebben tárgyalni.