2012-03-31 12 views
1

Für meine Programmiersprachen-Klasse versuche ich zu verstehen, wie Pass-by-Name und Pass-by-Value-Ergebnis funktionieren. Ich weiß, dass diese in den Mainstream-Sprachen kaum verwendet werden, aber ich möchte ein Gefühl dafür bekommen, wie sie funktionieren. Als Beispiel (sprachunabhängig):Pass-by-Name und Pass-by-Value-Ergebnis

void swap(int a, int b){ 
    int t; 
    t = a; 
    a = b; 
    b = t; 
} 
void main() { 
    int val = 1, list[5] = {1, 2, 3, 4, 5} 
    swap(val, list[val]); 
} 

Was die Werte von val und Liste werden nach Swap genannt wird, wären sowohl für Pass-by-Value-Ergebnis und Pass-by-Namen.

Eine Erklärung wäre auch toll.

Aus was ich abgeleitet habe, hat es value-result: val = 2, list = {1,1,3,4,5} und name: val = 3, list = {1,2,1,4, 5}. Ich bin sehr unsicher über diese Ergebnisse.

Ändert auch die Art, wie diese beiden Methoden funktionieren, wenn ein Array übergeben wird, im Gegensatz zu einem einzelnen int? Danke für jede Hilfe im Voraus.

Antwort

0

Wenn Sie meinen, dass Name nach Vornamen übergeben wird, dann entspricht das Ergebnis dem Wert.
Dies liegt daran, dass Sie nur Referenzen zwischen val und list position val wechseln. Sie übergeben keine Array-Referenz. Stellen Sie sich eine Variable als Zeiger auf einen Speicherblock vor, der einen Wert enthält.

0

dieser Code erklären eine von dem Problem der Pass namentlich diesem Grund

in Swap diesem was

void swap(int a, int b){ 
    int t; 
    t = a; //t=val; t=1 
    a = b;// val=list[val]; val=list[1]=2 
    b = t;// list[val]=t; list[2]=1 
} 
void main() { 
    int val = 1, list[5] = {1, 2, 3, 4, 5} 
    swap(val, list[val]); 
} 

geschehen ist, wie Sie das val geändert in val sehen = Liste [val] und es ist nicht die gleiche val übergeben Sie mehr

wie für Pässe von Wert Ergebnis

void swap(int a=1, int b=2){ 
    int t; 
    t = a; //a=1 so t=1 
    a = b; //b=2 so a=2 
    b = t; //b=1 so it and it return the right parameter so list[1]=2 
} 

ich hoffe das half

Verwandte Themen