Ultima actualizare la 27 iulie 2020

Argumente reale #

Argumentele care sunt menționate în apelul de funcție sunt cunoscute sub numele de argumente reale. De exemplu:

func1(12, 23);

Aici 12 și 23 sunt argumente reale.

Argumentele efective pot fi constante, variabile, expresii etc.

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

Argumente formale #

Argumentele care sunt menționate în definiția funcției se numesc argumente formale. Argumentele formale sunt foarte asemănătoare cu variabilele locale din interiorul funcției. La fel ca variabilele locale, argumentele formale sunt distruse atunci când funcția se termină.

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

Aici n este argumentul formal. Lucruri de reținut despre argumentele reale și formale.

  1. Ordinea, numărul și tipul argumentelor reale din apelul de funcție trebuie să se potrivească cu argumentele formale ale funcției.
  2. Dacă există o neconcordanță de tip între argumentele reale și cele formale, atunci compilatorul va încerca să convertească tipul argumentelor reale în argumente formale dacă este legal, în caz contrar, o valoare de gunoi va fi transmisă argumentului formal.
  3. Modificările efectuate în argumentul formal nu afectează argumentele reale.

Programul următor demonstrează acest comportament.

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

Aici valoarea variabilei x este 10 înainte de apelarea funcției func_1(), după apelarea func_1(), valoarea variabilei x în interiorul lui main() este tot 10. Modificările efectuate în interiorul funcției func_1() nu afectează valoarea variabilei x. Acest lucru se întâmplă deoarece, atunci când transmitem valori către funcții, se face o copie a valorii și această copie este transmisă către argumentele formale. Prin urmare, argumentele formale lucrează asupra unei copii a valorii originale, nu asupra valorii originale în sine, de aceea modificările efectuate în func_1() nu se reflectă în main(). Acest proces este cunoscut sub numele de trecere a argumentelor folosind Call by Value, vom discuta acest concept mai detaliat în capitolele următoare.

.

Lasă un răspuns

Adresa ta de email nu va fi publicată.