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.

  1. Porządek, liczba i typ argumentów rzeczywistych w wywołaniu funkcji musi być zgodny z argumentami formalnymi funkcji.
  2. 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.
  3. 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.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.