Avatar billede Lasse Novice
26. juni 2002 - 01:29 Der 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?
Avatar billede alsace Nybegynder
26. juni 2002 - 01:59 #1
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>

void callByValue(int a);
void callByReference(int &b);

void main() {
    int a = 0;
    int b = 0;

    callByValue(a);
    callByReference(b);

    cout << "a: " << a << endl;
    cout << "b: " << b << endl;
}

void callByValue(int a) { a = 5; }
void callByReference(int &b) {    b = 5; }
//------------------------------

Håber det var med til at afklare lidt af &-tegn's mystikken.

-Alsace
Avatar billede Lasse Novice
26. juni 2002 - 02:11 #2
men er det saa ikke det samme som naar man kalder det med :

void callByPointer(int* b);

void main() {
int* test;
*test = 123;
callByPointer(test)
cout << "test: " << *test << endl;

}

void callByPointer(int* b) { *b = 3 }


Hvad er forskellen her? Jeg vil mene at det er det samme
Avatar billede Lasse Novice
26. juni 2002 - 02:13 #3
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.... :(
Avatar billede fri-hash Nybegynder
26. juni 2002 - 08:41 #4
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)
Avatar billede Lasse Novice
26. juni 2002 - 16:30 #5
jamen... rent funktionalitets maessigt... hvad er forskellen?

Er der nogen steder hvor det ene er smartere at bruge fremfor det andet?
Avatar billede Lasse Novice
26. juni 2002 - 16:51 #6
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:

void callByReference(int &b)

da dette er en reference og ikke en pointer...?
Avatar billede Lasse Novice
03. september 2002 - 19:03 #7
ok
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester