Avatar billede knaste Nybegynder
24. oktober 2007 - 08:21 Der er 7 kommentarer og
1 løsning

Betydning af "call by value" og "call by reference"?

Go morgen,

er der nogen, som kan give en kort og präcis forklaring pä, hvad de to udtryk "call by value" og "call by reference" betyder?

Mange tak!
Avatar billede jpk Nybegynder
24. oktober 2007 - 08:30 #1
cbv = kopi af værdi
cbr = kopi af reference til værdi
Avatar billede knaste Nybegynder
24. oktober 2007 - 08:34 #2
OK, kan du forklare närmere, hvordan de benyttes?
Avatar billede jpk Nybegynder
24. oktober 2007 - 08:35 #3
Ex:
MyObject obj; // fiktiv klasse
obj.SetValue(10);
func1(obj); // Value er stadig 10
func2(obj); // Value er nu 20

// By-value = kopi af obj, værdien ændres kun på den lokale kopi
func1(MyObject obj) {
obj.SetValue(20);
}

// By-reference = kun referencen kopieres, men "peger" stadig på samme obj
func2(MyObject& obj) {
obj.SetValue(20);
}
Avatar billede comeasyouare Nybegynder
24. oktober 2007 - 10:14 #4
Hvis man betragter det med simple funktioner:
Call-by-value vil generelt sige at den kode der bliver eksekveret i den kaldte funktion, ikke kan ændre på de argumenter der bliver sendt med til funktionen

Og hvis det er call-by-reference er det omvendte gældende.

Eksempel:
int my_func1(int a);
void my_func2(int &a);


main()
{   
    int x1 = 5;
    int x2 = 7;
    // Call-by-value
    cout << x1; // Udskriv x1´s værdi som er 5
    my_func1(x1);
    cout << x1; // Udskriv x1´s værdi som stadig er 5
    // Call-by-reference
    cout << x2; // Udskriv x2´s værdi som er 7
    my_func2(x2);
    cout << x2; // Udskriv x2´s værdi som nu er 49
    getch();
    return 0;
}

int my_func1(int a)
{
    a = a*a;
    return a;
}
void my_func2(int &a) // Bemærk her & tegnet som kendes for pointer, dvs her
                      // arbejder funktionen ikke på en kopi af x2, men direkte
                      // x2, da den får x2's adresse med som REFERENCE
{
    a = a*a;
    return;
}
Avatar billede jpk Nybegynder
24. oktober 2007 - 10:44 #5
Jeg bryder mig ikke helt om formuleringen "den kode der bliver eksekveret i den kaldte funktion, ikke kan ændre på de argumenter der bliver sendt med til funktionen".
Det svarer egentling mere til betydningen af const-keyword'et.

Funktionen kan godt ændre på de argumenter der bliver sendt med, men det er kun kopier af de oprindelige objekter!
Avatar billede comeasyouare Nybegynder
24. oktober 2007 - 11:21 #6
Giver dig fuldstændig ret, var det jeg håbede på at redde ved at skrive generelt foran, men nej formuleringen er nok ikke helt heldigt.. :o)
Avatar billede knaste Nybegynder
30. oktober 2007 - 18:05 #7
Tak for gode forklaringer, begge to!
-> comeasyouare, læg et svar, saa deler I point.
Avatar billede comeasyouare Nybegynder
31. oktober 2007 - 12:29 #8
Jeg synes bare du skal give jpk pointene :o)
Han kom med et rigtigt svar først, jeg gav sådan set det samme svar, bare med et lidt andet eksempel :o)
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