2016-05-10 12 views
1

Ich habe diese Frage zu Methoden vorbei und ich möchte sicherstellen, dass ich es richtig versteheDifferenz zwischen Pass-by-Wert Pass-by-reference und Pass-by-

Was ist der Wert von i ist und Array ein wenn Argumente von ein Wert b Referenz c-Wert übergeben werden/Ergebnis asseume wir folgende Pseudo-Code

enter image description here

diese meine Antwort ist

haben
By value 
i = 1 
a[1]=10 
a[2]=11 

    by reference 
i = 3 
a[1] = 2 
a[2] = 11 

by value result 
i = 2 
a[1] = 10 
a[2] = 1 

ist das korrekt? Danke

+0

also wird sich hier [2] nie ändern? es wird immer ein [2] = 11 sein? – user3382285

Antwort

1

Zuerst, wenn Sie eine Funktion (oder Prozedur, wie Sie es nennen) aufrufen, wird ein neuer Aufruf-Stack erstellt. Auf dieser Aufrufliste sind die Parameter Werten zugeordnet (Parameter sind diejenigen, die Teil Ihrer Funktionssignatur sind. Normalerweise nennen wir sie 'formale Parameter', wie die x y z in Ihrer obigen Prozedur f). Was ihnen zugewiesen wird, hängt von den tatsächlichen Argumenten ab, mit denen die Funktion aufgerufen wird.

Wenn sie von Werten übergeben werden, werden die formalen Parameter den Werten der Argumente zugewiesen. Das bedeutet, dass die Werte der tatsächlichen Argumente zu den formalen Parametern kopiert werden. Alle weiteren Operationen mit den formalen Parametern beeinflussen das Argument überhaupt nicht. In Ihrem Beispiel wird y dem Wert a[1] zugewiesen, der 10 ist. Im Körper der Funktion wird y neu zugewiesen, aber a[1] ist nichts mehr passiert.

Wenn sie als Referenz übergeben werden, werden andererseits die Formalparameter der Speicheradresse der tatsächlichen Argumente zugewiesen, und im Funktionskörper werden die Formalparameter implizit auf die Werte dieser Speicheradresse dereferenziert. In Ihrem Beispiel x wird auch die Speicheradresse i, y für a[1] und z für i halten. Betrieb an x y z sind tatsächlich Betrieb am i und a[1].

Ich weiß nicht, was Sie mit "von Wert als Ergebnis übergeben" meinen. Ich habe solche Begriffe nie woanders gesehen.

Eine andere Sache, die ich erwähnen möchte, ist, gibt es zwei verschiedene Bedeutungen von "Referenz" in der Programmierwelt. Ich werde keine Zeit haben, um eine lange Erklärung zu geben. Sie können nach "Referenztyp in Java" und "Referenzvariablen in C++" suchen, um den Unterschied zu sehen.

Verwandte Themen