C programmering :: Funktioner
Du skal vide noget om scope, det er variablers synlighed. Variabler kan erklæres globale, hvorved variablens scope er global, den kan erklæres lokal til en eller anden funktion og variables scope er derfor indenfor funktionen. Følgende eksempel illustrerer scope:
- Compilér og kør programmet
# ./a.out
fn1 siger global = 6
main siger retur = 6 og global = 6
fn2 siger prm = 6
main siger retur = 6 og local = 4
fn3 siger prm = 6
main siger retur = 6 og local = 6
#
Du ser fn1() som en funktion uden parametre, men som opdaterer på en global variabel.
Funktionen fn2() får en parameter prm som den opdaterer, men den opdateres kun lokalt, den variabel-værdi der blev overført blev ikke opdateret. Man kan sige at prm kun eksisterer som variabel sålænge fn2() kører. Parameteroverførslen er kun en værdi og derfor kaldes by value.
Det du ser i fn3() er en mulighed for at overføre en variabel som funktionen kan opdatere uden at variablen er erklæret inden i funktionen eller variablen er global. Det gøres med at variablen's adresse overføres i stedet for dens værdi, det kaldes at overføre by reference i stedet for som fn2() funktionen by value.
I kaldet til fn3() bruges adresseoperatoren &, den fortæller at det ikke er variabens værdi der ønskes, men dens adresse. Ved adressen til en variabel kan fn3() ændre på værdien, prm bliver erklæret som en pointer-til-int ved * og hver gang denne pointer udpegede værdi ønskes i funktionsblokken bruges ligeledes * foran pointer-variablen.