26. juni 2002 - 01:29Der er
6 kommentarer og 1 løsning
void test(int& hej)
Jeg har undret mig over & tegnet i foelgende erklaering:
void test(int& hej)
I denne erklaering:
void test(int* hej)
forventes det at der som parameter kommer en pointer(paa dansk, en adresse). Hvad forventer den i det foerste eksempel... Jeg har hoert at den egentlig bare forventer en variable, men det er skrevet fordi det er maaden funktionen bruger variablen paa... det fattede jeg ikke noget af, saa er der nogen der kan forklare mig det?
Hmm, det er ved at være lidt længe siden... men måske giver dette lidt mening :)
Hvis man har en "almindelig" funktion som f.eks: void fordobbel(int a); benytter man sig af det måde at at give parametre på der hedder "pass by value". Det betyder i dette tilfælde at 'a' variablen kun vil leve inde i selve fordobbel funktionen. Benyttes derimod "pass by reference" som angives med et &-tegn ("address of"), så det ser sådan her ud: void fordobbel(int &a); Vil man, som du selv skriver i stedet for værdien af variablen overføre addressen til variablen. Det betyder at hvis du ændre værdien på variablen 'a' inden i fordobbel funktionen, så vil den "overleve" og være tilgængelig bagefter.
Prøv evt. at køre følgende stykke kode og lur resultatet. //------------------------------ #include <iostream.h>
og hvis det endelig er det.... hvorfor har man saa disse to forskellige valgmuligheder... er der situationer hvor det ene ikke er muligt, eller hvordan skal det forstaas? Jeg kan se at det faktisk bliver nemmere laeseligt med det foerste eksempel, men ellers kan jeg ikke se den store forskel.... :(
forskellen er hvordan parameteren optræder - hvis den værdi der skal sendes som parameter er erklæret som en pointer bruges *, hvis den er erklæret "almindeligt" bruges & (hvis funktionen vel at mærke skal have adgang til at ændre den originale variabel)
jeg sidder lige og laeser om managed code/unmanaged code. Jeg laeser at managed code og pointers er to modsaetninger(kan ikke leve i symbiose). Saa kunne jeg forestille mig at man ikke kunne skrive:
void callByPointer(int* b)
da det tager brug af pointere... men mon det er saa er muligt at skrive:
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.