Parametrii actuali si formali

Parametri formali apar în antetul subprogramului şi sunt utilizaţi de subprogram pentru descrierea abstractă a unui proces de calcul .

Parametri actuali apar în instrucţiunea de apelare a uni subprogram şi sunt folosiţi la execuţia unui proces de calcul pentru valori concrete.

Parametrii formali nu sunt variabile. O variabilă este caracterizată de nume, tip, şi adresă. Legarea unui parametru formal la o adresă se realizează în timpul execuţiei instrucţiunii de apelare a subprogramului.

Apel prin valoare şi apel prin referinţă

Există două tipuri de apel al subprogramelor:

A. Apel prin valoare- se transmite o copie a parametrului actual. Valorile transmise la apelul unui subprogram sunt memorate în stivă. Datorită faptului că, după terminarea execuţiei unui subprogram, stiva este eliberată, în cazul apelului prin valoare parametrul actual nu se modifică (se operează asupra unei copii a parametrului efectiv)

B. Apel prin referinţă se transmite adresa parametrului actual. În cazul apelului prin referinţă, subprogramul, cunoscând adresa parametrului actual, acţionează direct asupra locaţiei de memorie indicată de aceasta, modificândvaloarea parametrului actual.

În C, implicit apelul este prin valoare. Pentru a specifica un apel prin referinţă, în lista parametrilor formali, numele parametrului formal va trebui precedat de simbolul &. (SHIFT + 7)

void schimba_valoare (int x, int y)

//transmitere prin valoare

//transmitere prin referinta

{ int z=x; x = y; y = z; }

void schimba_referinta (int &a, int &b)

{ int aux=a; a=b; b=aux; }

int main ()

{ int M=1, N=5;

schimba_valoare(M,N);

cout << "M="<<M<< " " << "N="<<N<<endl;

schimba_referinta(M,N);

cout << "M="<<M<< " " << "N="<<N<<endl;

return 0;

}

Regula de omonimie: Intre lista parametrilor formali si cei efectivi trebuie sa existe o relatie biunivoca, adica acestia trebuie sa corespunda ca numar, tip si pozitie in lista de parametri.

RESTRUCTURARE:

Picture
Picture

Transferul datelor între apelator şi apelat

•Prin variabile globale

•Prin parametri

•Transfer teoretic

–prin valoare

–prin adresă

•Variabile simple

•Simularea transferului prin adresă pentru variabile simple

•Masive

–Vectori

–Matrice

Transferul prin valoare / adresă

Picture

Transferul variabilelor simple

Picture

Transferul vectorilor

Picture

Transferul matricelor

Picture

Transferul masivelor

Picture

Exemple

Produs vectorial între doi vectori

–Toate masivele alocate static

–Toate masivele alocate dinamic în apelator

–Toate masivele alocate dinamic, rezultatul alocat în subprogram

Produsul dintre 2 matrice

–Toate masivele alocate static

–Toate masivele alocate dinamic în apelator

–Toate masivele alocate dinamic, rezultatul alocat în subprogram

Tratarea parametrilor din linia de comandă

Picture