Ostatnia aktualizacja 27 lipca 2020
Aktualne argumenty #
Argumenty, które są wymienione w wywołaniu funkcji jest znany jako rzeczywisty argument. Na przykład:
func1(12, 23);
gdzie 12
i 23
są argumentami rzeczywistymi.
Aktualnymi argumentami mogą być stałe, zmienne, wyrażenia itp.
12 |
func1(a, b); // here actual arguments are variablefunc1(a + b, b + a); // here actual arguments are expression |
Argumenty formalne #
Argumenty, które są wymienione w definicji funkcji nazywamy argumentami formalnymi. Argumenty formalne są bardzo podobne do zmiennych lokalnych wewnątrz funkcji. Podobnie jak zmienne lokalne, argumenty formalne są niszczone po zakończeniu działania funkcji.
1234 |
int factorial(int n){ // write logic here} |
Tutaj n
jest argumentem formalnym. Rzeczy do zapamiętania o argumentach rzeczywistych i formalnych.
- Porządek, liczba i typ argumentów rzeczywistych w wywołaniu funkcji musi być zgodny z argumentami formalnymi funkcji.
- Jeśli istnieje niedopasowanie typu między argumentami rzeczywistymi i formalnymi, wówczas kompilator spróbuje przekonwertować typ argumentów rzeczywistych na argumenty formalne, jeśli jest to legalne, W przeciwnym razie wartość śmieci zostanie przekazana do argumentu formalnego.
- Zmiany dokonane w argumencie formalnym nie mają wpływu na argumenty rzeczywiste.
Następujący program demonstruje to zachowanie.
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);} |
Tutaj wartość zmiennej x
wynosi 10
przed wywołaniem funkcji func_1()
, po wywołaniu func_1()
wartość x
wewnątrz main()
nadal wynosi 10
. Zmiany dokonane wewnątrz funkcji func_1()
nie wpływają na wartość x
. Dzieje się tak, ponieważ kiedy przekazujemy wartości do funkcji, tworzona jest kopia wartości i ta kopia jest przekazywana do argumentów formalnych. Stąd argumenty formalne działają na kopii oryginalnej wartości, a nie na samej wartości oryginalnej, dlatego zmiany dokonane wewnątrz func_1()
nie są odzwierciedlane wewnątrz main()
. Ten proces jest znany jako przekazywanie argumentów przy użyciu Call by Value, omówimy tę koncepcję bardziej szczegółowo w kolejnych rozdziałach.