Naposledy aktualizováno 27. července 2020

Skutečné argumenty #

Argumenty, které jsou uvedeny ve volání funkce, se nazývají skutečné argumenty. Například:

func1(12, 23);

zde 12 a 23 jsou skutečné argumenty.

Aktuálními argumenty mohou být konstanty, proměnné, výrazy atd.

12
func1(a, b); // here actual arguments are variablefunc1(a + b, b + a); // here actual arguments are expression

Formální argumenty #

Argumenty, které jsou uvedeny v definici funkce, se nazývají formální argumenty. Formální argumenty jsou velmi podobné lokálním proměnným uvnitř funkce. Stejně jako lokální proměnné jsou formální argumenty po ukončení funkce zničeny.

1234
int factorial(int n){ // write logic here}

Tady n je formální argument. Co je třeba si zapamatovat o skutečných a formálních argumentech:

  1. Pořadí, počet a typ skutečných argumentů ve volání funkce se musí shodovat s formálními argumenty funkce.
  2. Pokud dojde k typové neshodě mezi skutečnými a formálními argumenty, pak se překladač pokusí převést typ skutečných argumentů na formální argumenty, pokud je to legální, V opačném případě bude formálnímu argumentu předána odpadní hodnota.
  3. Změny provedené ve formálním argumentu nemají vliv na skutečné argumenty.

Následující program demonstruje toto chování.

 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);}

Zde je hodnota proměnné x před voláním funkce func_1() 10, po volání func_1() je hodnota x uvnitř main() stále 10. Změny provedené uvnitř funkce func_1() nemají na hodnotu x vliv. K tomu dochází proto, že když předáváme hodnoty funkcím, vytvoří se kopie hodnoty a tato kopie se předá formálním argumentům. Formální argumenty tedy pracují s kopií původní hodnoty, nikoli s původní hodnotou samotnou, proto se změny provedené uvnitř func_1() neprojeví uvnitř main(). Tento proces je znám jako předávání argumentů pomocí volání podle hodnoty, podrobněji se tímto konceptem budeme zabývat v příštích kapitolách.

.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.