Capitolul 1.8. Argumente - apelul prin valoare

Vezi subiectul anterior Vezi subiectul urmator In jos

Capitolul 1.8. Argumente - apelul prin valoare

Mesaj  zooky la data de Mier Mar 18, 2009 12:48 am

Un aspect al functiilor din limbajul C s-ar putea sa fie nefamiliar programatorilor obisnuiti cu alte limbaje, in particular cu FORTRAN sau PL/1.
In C, toate argumentele functiei sint transmise "prin valoare". Aceasta inseamna ca functiei apelate i se transmit valorile argumentelor in variabile temporare (de fapt intr-o stiva ) si nu i se transmit adresele lor. Aceasta duce la citeva proprietati diferite fata de limbajele cu "apel prin referinta" de tipul FORTRAN si PL/1, in care rutina apelata minuieste adresele argumentelor si nu valorile lor.
Principala distinctie este aceea ca in limbajul C, functia apelata nu poate altera o variabila in functia apelata; ea poate altera numai copia ei temporara si privata. Apelul prin valoare este, cu toate acestea un avantaj si nu o obligatie. Uzual, el conduce la programe mai compacte cu mai putine variabile inutile, deoarece argumentele pot fi tratate ca variabile locale initializate convenabil in rutina apelata.
Drept exemplu, dam in continuare o versiune a functiei power care face uz de acest fapt.

power(x,n) /*ridica pe x la puterea a n-a; n > 0;versiunea 2*/
int x, n;
{
int p;
for (p = 1; n > 0; --n)
p = p * x;
return(p);
}

Argumentul n este folosit ca o variabila temporara, si este decrementat pina cind devine zero; nu mai este nevoie de variabila i. Ceea ce se face cu n in interiorul lui power nu are nici un efect asupra argumentului cu care a fost apelata power initial.

Cind este necesar, este posibil sa aranjam ca o functie sa modifice o variabila in rutina apelanta. Apelandul trebuie sa dea adresa variabilei de setat (in mod tehnic, sa creeze un pointer la variabila),iar functia apelata trebuie sa declare argumentul ca fiind un pointer si sa refere variabila reala in mod indirect prin el. Vom discuta in detaliu aceste probleme in Capitolul 5.

Cind numele unui tablou este folosit ca si argument, valoarea transmisa functiei este locatia sau adresa de inceput a tabloului. (Nu se face nici o copiere de elemente de tablou). Indiciind aceasta valoare, functia poate avea acces si altera orice element al tabloului. Acesta este subiectul urmatoarei sectiuni.
avatar
zooky
Moderator
Moderator

Numarul mesajelor : 147
Data de inscriere : 15/03/2009
Varsta : 24
Localizare : Cernatesti City

Vezi profilul utilizatorului http://e-learning.forumhit.ro

Sus In jos

Vezi subiectul anterior Vezi subiectul urmator Sus


 
Permisiunile acestui forum:
Nu puteti raspunde la subiectele acestui forum