Senast uppdaterad den 27 juli 2020

Aktuella argument #

Argument som nämns i funktionsanropet är känt som det faktiska argumentet. Till exempel:

func1(12, 23);

här är 12 och 23 faktiska argument.

Aktuella argument kan vara konstanter, variabler, uttryck etc.

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

Formella argument #

Argument som nämns i definitionen av funktionen kallas formella argument. Formella argument är mycket lika lokala variabler inom funktionen. Precis som lokala variabler förstörs formella argument när funktionen avslutas.

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

Här är n det formella argumentet. Saker att komma ihåg om faktiska och formella argument.

  1. Ordning, antal och typ av de faktiska argumenten i funktionsanropet måste stämma överens med funktionens formella argument.
  2. Om det finns en typobalans mellan faktiska och formella argument kommer kompilatorn att försöka omvandla de faktiska argumentens typ till formella argument om det är lagligt, annars kommer ett skräpvärde att skickas till det formella argumentet.
  3. Förändringar som görs i det formella argumentet påverkar inte de faktiska argumenten.

Följande program demonstrerar detta beteende.

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

Här är värdet på variabeln x 10 innan funktionen func_1() anropas, efter att func_1() anropats är värdet på x inne i main() fortfarande 10. De ändringar som görs inuti funktionen func_1() påverkar inte värdet på x. Detta händer eftersom när vi överlämnar värden till funktionerna görs en kopia av värdet och den kopian överlämnas till de formella argumenten. Formella argument arbetar alltså på en kopia av det ursprungliga värdet, inte på själva det ursprungliga värdet, vilket är anledningen till att ändringar som görs i func_1() inte återspeglas i main(). Denna process är känd som att överlämna argument med hjälp av Call by Value, vi kommer att diskutera detta koncept mer i detalj i kommande kapitel.

Lämna ett svar

Din e-postadress kommer inte publiceras.