Capitolul 4.3. Despre argumentele functiilor
:: Programare :: C & C++ :: Capitolul 4
Pagina 1 din 1
Capitolul 4.3. Despre argumentele functiilor
In Capitolul 1 am discutat faptul ca argumentele functiilor sint trimise prin valoarea, adica functia apelata primeste o copie temporara si privata a fiecarui argument si nu adresele lor. Aceasta inseamna ca functia nu poate afecta argumentul original din functia apelanta. Intr-o functie argument este de fapt o variabila locala initializata cu valoarea cu care functia a fost apelata.
Cind un nume de tablou apare ca argument al unei functii locatia de inceput a tabloului este cea trimisa; elementele nu sint copiate. Functia poate altera elementele tabloului indexind cu aceasta valoare. Efectul este ca tablourile sint trimise prin referinta. In capitolul 5 vom discuta folosirea pointerilor pentru a permite functiilor sa nu altereze tablourile din functiile apelante. Fiindca veni vorba, nu este un mod intrutotul satisfacator acela de a scrie o functie portabila care acepta un numar variabil de argumente, deoarece nu exista nici o modalitate portabila pentru functia apelata sa determine cite argumente i-au fost trimise actual intr-un apel dat. Astfel, nu puteti scrie o functie portabila intr-adevar de argumente, asa cum sint functiile MAX scrise in FORTRAN sau PL/1.
Este in general sigur sa ne ocupam cu un numar variabil de argumente daca functia apelata nu foloseste un argument care nu a fost furnizat efectiv si daca tipurile sint consistente.
printf, cea mai comuna functie in C cu un numar variabil de argumente, foloseste informatia din primul sau argument pentru a determina cite alte elemente sint prezente si care sint tipurile lor. Ea esueaza urit daca apelantul nu furnizeaza suficiente argumente sau daca tipurile nu sint cele specificate de primul argument. Ea este deasemenea neportabila si trebuie modificata pentru diferite calculatoare.
Reciproc, daca argumentele sint de tip cunoscut, este posibil sa marcam sfirsitul listei de argumente intr-un mod corespunzator. De exemplu cu valoare de argument speciala (adresa0) care specifica sfirsitul listei de argumente.
Cind un nume de tablou apare ca argument al unei functii locatia de inceput a tabloului este cea trimisa; elementele nu sint copiate. Functia poate altera elementele tabloului indexind cu aceasta valoare. Efectul este ca tablourile sint trimise prin referinta. In capitolul 5 vom discuta folosirea pointerilor pentru a permite functiilor sa nu altereze tablourile din functiile apelante. Fiindca veni vorba, nu este un mod intrutotul satisfacator acela de a scrie o functie portabila care acepta un numar variabil de argumente, deoarece nu exista nici o modalitate portabila pentru functia apelata sa determine cite argumente i-au fost trimise actual intr-un apel dat. Astfel, nu puteti scrie o functie portabila intr-adevar de argumente, asa cum sint functiile MAX scrise in FORTRAN sau PL/1.
Este in general sigur sa ne ocupam cu un numar variabil de argumente daca functia apelata nu foloseste un argument care nu a fost furnizat efectiv si daca tipurile sint consistente.
printf, cea mai comuna functie in C cu un numar variabil de argumente, foloseste informatia din primul sau argument pentru a determina cite alte elemente sint prezente si care sint tipurile lor. Ea esueaza urit daca apelantul nu furnizeaza suficiente argumente sau daca tipurile nu sint cele specificate de primul argument. Ea este deasemenea neportabila si trebuie modificata pentru diferite calculatoare.
Reciproc, daca argumentele sint de tip cunoscut, este posibil sa marcam sfirsitul listei de argumente intr-un mod corespunzator. De exemplu cu valoare de argument speciala (adresa0) care specifica sfirsitul listei de argumente.
Subiecte similare
» Capitolul 5.11. Argumentele liniei de comanda
» Despre MAC OS
» Despre Yahoo (detaliat)
» Capitolul 3.2.IF-ELSE
» Capitolul 3.3. ELSE-IF
» Despre MAC OS
» Despre Yahoo (detaliat)
» Capitolul 3.2.IF-ELSE
» Capitolul 3.3. ELSE-IF
:: Programare :: C & C++ :: Capitolul 4
Pagina 1 din 1
Permisiunile acestui forum:
Nu puteti raspunde la subiectele acestui forum
|
|