Lekcija: Funkcije - predaja parametara po vrednosti
Da ponovimo:
Funkcija obezbeđuju pogodan način za obuhvatanje nekog izračunavanja, koja se zatim može koristiti bez brige oko njene implementacije. Uz pravilno osmišljene funkcije, moguće je zanemariti to kako se neki zadatak obavlja - dovoljno je znati šta se obavlja. U jeziku C funkcije se koriste na lak i efikasan način: često se mogu naći kratke funkcije koje su definisane i pozvane samo jednom, samo zato što to čini jasnijim neki deo koda.‚
Do sada smo koristili funkcije kao što su printf, scanf, puts koje su drugi napisali - sada je vreme da napišemo neke svoje.
Primer: Napraviti funkciju zbir(a,b) koja vraća zbir dva realna broja.
U nastavku je data funkcija zbir kao i glavna funkcija koja je koristi, kako biste celu strukturu videli na jednom mestu
Definicija funkcije ima ovaj oblik:
tip-rezultata ime-funkcije(deklaracije parametara ako postoje)
{
deklaracije
definicije
}
Funkcija zbir se u našem primeru samo jednom poziva u funkciji main u redu
Svaki poziv prenosi dva argumenta funkciji
Deklaracija
odmah ispred main kaže da je zbir funkcija koja očekuje dva argumenta tipa float i vraća rezultat tipa float. Ova deklaracija, koja se naziva prototip funkcije, mora da se slaže sa definicijom u upotrebom funkcije zbir. Greška je ako definicija funkcije ili njena upotreba nije saglasna njenom prototipu.
Imena parametara ne moraju da se poklapaju. U stvari, imena parametara su opciona u prototipu funkcije i u našem primeru smo mogli da napišemo
Međutim, dobro izabrana imena su dobra dokumentacija i treba se truditi da se tako koriste.
Argumenti - pozivanje po vrednosti
U C-u, svi argumenti se prenose po vrednosti. To znači da se pozvanoj funkciji vrednosti njenih argumenata predaju u privremenim promenljivama, a ne u originalnim.
Pozvana finkcija ne može direktno promeniti promenljivu u pozivajućoj funkciji, već ona može da promeni samo svoju privatnu, privremenu kopiju.
Međutim, pozivanje po vrednosti je prednost a ne mana. Ono obično dovodi do kraćih programa sa manje dodatnih promenljivih, jer se parametri u pozvanoj funkciji mogu tretirati kao pogodno inicijalizovane lokalne promenljive.
Na primer, u našoj funkciji
parametar prviBroj se koristi kao privremena promenljiva. Sve što se sa tom promenljivom uradi unutar funkcije zbir nema efekta na taj argument sa kojim je funkcija zbir prvobitno pozvana.
(Isto važi i za promenljivu drugiBroj.)