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:

1 /* funktion2.c - Scope er Variablers synlighed */ 2 3 #include <stdio.h> 4 5 int global; /* kan ses overalt */ 6 7 int fn1() 8 { 9 global = global + 2; 10 printf("fn1 siger global = %d\n",global); 11 return global; 12 } 13 14 int fn2(int prm) /* prm kendes kun af fn2 */ 15 { 16 prm = prm + 2; 17 printf("fn2 siger prm = %d\n",prm); 18 return prm; 19 } 20 21 int fn3(int *prm) /* prm kendes kun af fn2 */ 22 { 23 *prm = *prm + 2; 24 printf("fn3 siger prm = %d\n",*prm); 25 return *prm; 26 } 27 28 29 main() 30 { 31 int local,retur; 32 33 global = 4; 34 retur = fn1(); 35 printf("main siger retur = %d og global = %d\n",retur,global); 36 37 local = 4; 38 retur = fn2(local); 39 printf("main siger retur = %d og local = %d\n",retur,local); 40 retur = fn3(&local); 41 printf("main siger retur = %d og local = %d\n",retur,local); 42 }
funktion2.c
  • Compilér og kør programmet
# gcc funktion2.c
# ./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.

14 int fn2(int prm) /* prm kendes kun af fn2 */ 15 { 16 prm = prm + 2; 17 printf("fn2 siger prm = %d\n",prm); 18 return prm; 19 }

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.

21 int fn3(int *prm) /* prm kendes kun af fn2 */ 22 { 23 *prm = *prm + 2; 24 printf("fn3 siger prm = %d\n",*prm); 25 return *prm; 26 }

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.

Ressourcer C Library opslag The Single UNIX® Specification, Version 2 Copyright © 1997 The Open Group GNU C Library Engelsk, med masser af gode og dybe artikler. Danske søgeord Find selv de bedste danske søgeord til din hjemmeside.
Produkter Bookingsystem
System for reservation af tid for behandlinger, aftaler, lokaler, udstyr, personale. Tilpasset lektionstimer. Udskriver arbejdsplaner og ugeskema for opslag. Statistik. Danmarks bedste pris nu kun kr. 1.695,-
HelpdeskEffektiviser din support-organisation med et Helpdesksystem. Fjern tidrøvere der forhindrer fokus på problemløsning. Lektionsplan Formidling af generelle information og specifikke lektioner fra undervisere til studerende/elever. Medlemssystem Medlemssystem online med administration af medlemskartotek, kontingentbetalinger, flettefiler m.m.
Styr selv Styr selv indholdet på dine hjemmesider med Content Management System.
Citat Gamle mennesker tror ikke, unge mennesker ved noget om kærligheden. Unge mennesker tror, gamle mennesker har glemt kærligheden.

Isaac Asimov



Professionelle løsninger til Internettet. Webdesign, e-handel, cms, søgeoptimering, webhotel, analyse, Intranet mm.