Sidst opdateret den 27. juli 2020

Aktuelle argumenter #

Argumenter, der er nævnt i funktionsopkaldet, er kendt som det aktuelle argument. For eksempel:

func1(12, 23);

her er 12 og 23 de faktiske argumenter.

Aktuelle argumenter kan være konstanter, variabler, udtryk osv.

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

Formelle argumenter #

Argumenter, der er nævnt i definitionen af funktionen, kaldes formelle argumenter. Formelle argumenter svarer meget til lokale variabler inde i funktionen. Ligesom lokale variabler destrueres formelle argumenter, når funktionen slutter.

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

Her er n det formelle argument. Ting, der skal huskes om faktiske og formelle argumenter.

  1. Rækkefølge, antal og type af de faktiske argumenter i funktionskaldet skal stemme overens med funktionens formelle argumenter.
  2. Hvis der er typeoverensstemmelse mellem faktiske og formelle argumenter, vil compileren forsøge at konvertere typen af faktiske argumenter til formelle argumenter, hvis det er lovligt, Ellers vil der blive overført en garbage-værdi til det formelle argument.
  3. Ændringer, der foretages i det formelle argument, påvirker ikke de faktiske argumenter.

Det følgende program demonstrerer denne adfærd.

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

Her er værdien af variablen x 10 før funktionen func_1() kaldes, efter at func_1() er kaldt, er værdien af x inde i main() stadig 10. De ændringer, der foretages inde i funktionen func_1(), påvirker ikke værdien af x. Dette sker, fordi når vi overfører værdier til funktionerne, laves der en kopi af værdien, og denne kopi overføres til de formelle argumenter. Formelle argumenter arbejder derfor på en kopi af den oprindelige værdi og ikke på selve den oprindelige værdi, og derfor afspejles ændringer, der foretages i func_1(), ikke i main(). Denne proces er kendt som overdragelse af argumenter ved hjælp af Call by Value, vi vil diskutere dette koncept mere detaljeret i de kommende kapitler.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.