Call-by-reference, value und name
Ich versuche zu verstehen, der konzeptionelle Unterschied zwischen call-by-reference, value und name.
So, ich habe der folgende pseudocode:
foo(a, b, c)
{
b =b++;
a = a++;
c = a + b*10
}
X=1;
Y=2;
Z=3;
foo(X, Y+2, Z);
Was die X -, Y-und Z nach der foo aufrufen, wenn a, b, und c sind alle call-by-reference?
wenn a, b, und c sind call-by-value/result?
wenn a, b, und c sind call-by-name?
Anderes Szenario:
X=1;
Y=2;
Z=3;
foo(X, Y+2, X);
Ich versuche, Holen Sie sich einen Vorsprung für das Studium für einen bevorstehenden endgültigen und dies schien wie eine gute review-problem zu übergehen. Pass-by-name ist auf jeden Fall die meisten mir Fremd.
- Bewegen Sie die Maus über die tags, die Sie setzen Sie einfach auf die Frage und sehen Sie sich die Beschreibungen. Ich habe noch nie gehört, der pass von Namen, es sei denn, das ist eine Art der Reflexion.
- Vorbei, Name: stackoverflow.com/questions/838079/...
- Wissen Sie, was Pointer sind? Übergabe by reference ist nur, wird ein Zeiger übergeben, während die übergabe per Wert übergeben wird den Wert selbst.
- en.wikipedia.org/wiki/Evaluation_strategy
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie einen parameter als Wert übergeben, der es gerade kopiert den Wert innerhalb der Funktion parameter und was auch immer getan mit, dass die variable innerhalb der Funktion nicht nach den ursprünglichen Variablen, z.B.
aber wenn wir senden, die Parameter by reference übernimmt es die Adresse der variable, was bedeutet, dass alles, was wir tun, mit den Variablen innerhalb der Funktion, ist tatsächlich in den ursprünglichen Speicherort z.B.
für die pass-by-name;
Pass-by-name
Y+2
ist kein lvalue, also bin ich nicht sicher, was die Zuordnung zu es würde sogar bedeuten.Call-by-Value ist der normale Weg... die Werte der aktuellen Parameter werden kopiert den formalen Parameter.
Call-by-Reference : anstatt die Parameter, deren Adressen übergeben und die formalen Parameter auf den aktuellen Parameter.
Call-by-Name : wie Makros, die ganze Funktionsdefinition ersetzt den Funktionsaufruf formale Parameter sind nur ein anderer name für den aktuellen Parameter.
Durch Wert - es gibt keine änderungen außerhalb der Funktion. alle Ihre Aktionen verschwinden, wenn die Funktion beendet.
Verweis - Ihre Handlungen in der Tat änderungen der Variablen.
Durch Namen - hab ich noch nie gehört ...
Vorbei x+1 nicht ändern, nur erzählt, um die Funktion 3 statt 2 oder usw...
Diese nicht ändern, der Wert von X, Y oder Z, wenn es ist pass-by-value. Wenn Sie eine Funktion verwenden, wie "foo()", die im Grunde Kopien der Variablen (x, y und z) in anderen Variablen (a, b und c) und macht bestimmte Aktionen mit Ihnen, ohne änderung des originals (x, y und z). Sie ändern einen Wert, den Sie haben würde, um einen Wert zurückzugeben, so etwas wie dieses:
Dann x und y die gleiche wäre, aber z wäre (x+1)+(y+1)*10, das wäre in diesem Fall 32.
in javascript :
von Wert.
Array und Objekt übergeben, wie pass by reference oder pass-by-value basierend auf diesen Zustand.
wenn Sie ändern den Wert des Objekts oder Arrays mit new Object oder Array, dann ist es Wert übergeben.
object1 = {item: "car"};
array1=[1,2,3];
hier bei der Zuweisung einer neuen Objekt oder ein array.ändern Sie nicht den Wert des Eigentums
der alte Objekt.so ist es als Wert übergeben.
wenn Sie ändern den Wert einer Eigenschaft von einem Objekt oder array, dann ist es pass-by-Reference.
object1.item= "car";
array1[0]=9;
sind Sie hier ändern einer Eigenschaft mit dem Wert des alten Objekts.Sie sind nicht die Zuordnung neuer Objekt oder array zu alten.so ist es pass-by-reference.
Code