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.

  1. 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.
  2. 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.
  3. 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.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.