708 Stimmen

Was ist der Unterschied zwischen der Übergabe per Referenz und der Übergabe per Wert?

Was ist der Unterschied zwischen

  1. ein als Referenz übergebener Parameter
  2. einen als Wert übergebenen Parameter?

Könnten Sie mir bitte einige Beispiele nennen?

0 Stimmen

1 Stimmen

Wenn Sie nicht wissen, was ein Adresse o Wert ist dann siehe aquí

5voto

Tina Endresen Punkte 121

Ein wesentlicher Unterschied zwischen ihnen besteht darin, dass Variablen vom Typ Wert Werte speichern, so dass die Angabe einer Variablen vom Typ Wert in einem Methodenaufruf eine Kopie des Wertes dieser Variablen an die Methode weitergibt. Variablen vom Typ "Referenz" speichern Verweise auf Objekte. Die Angabe einer Variablen vom Typ "Referenz" als Argument übergibt der Methode eine Kopie des tatsächlichen Verweises, der auf das Objekt verweist. Auch wenn die Referenz selbst als Wert übergeben wird, kann die Methode die erhaltene Referenz verwenden, um mit dem ursprünglichen Objekt zu interagieren und es möglicherweise zu verändern. In ähnlicher Weise gibt die Methode bei der Rückgabe von Informationen aus einer Methode über eine Return-Anweisung eine Kopie des in einer Variablen vom Typ Wert gespeicherten Wertes oder eine Kopie der in einer Variablen vom Typ Referenz gespeicherten Referenz zurück. Wenn eine Referenz zurückgegeben wird, kann die aufrufende Methode diese Referenz verwenden, um mit dem referenzierten Objekt zu interagieren. In der Tat werden Objekte also immer per Referenz übergeben.

Um in c# eine Variable per Referenz zu übergeben, so dass die aufgerufene Methode die Variable ändern kann, bietet c# die Schlüsselwörter ref und out. Durch die Anwendung des ref-Schlüsselworts auf eine Parameterdeklaration können Sie eine Variable per Referenz an eine Methode übergeben - die aufgerufene Methode kann die ursprüngliche Variable im Aufrufer ändern. Das Schlüsselwort ref wird für Variablen verwendet, die in der aufrufenden Methode bereits initialisiert wurden. Wenn ein Methodenaufruf eine nicht initialisierte Variable als Argument enthält, erzeugt der Compiler in der Regel einen Fehler. Wird einem Parameter das Schlüsselwort out vorangestellt, wird ein Ausgabeparameter erzeugt. Dies zeigt dem Compiler an, dass das Argument per Referenz an die aufgerufene Methode übergeben wird und dass die aufgerufene Methode der ursprünglichen Variablen im Aufrufer einen Wert zuweist. Wenn die Methode dem Ausgabeparameter nicht in jedem möglichen Ausführungspfad einen Wert zuweist, erzeugt der Compiler einen Fehler. Dies verhindert auch, dass der Compiler eine Fehlermeldung für eine nicht initialisierte Variable erzeugt, die als Argument an eine Methode übergeben wird. Eine Methode kann über eine Return-Anweisung nur einen Wert an ihren Aufrufer zurückgeben, kann aber mehrere Werte zurückgeben, indem sie mehrere Ausgabeparameter (ref und/oder out) angibt.

siehe c# Diskussion und Beispiele hier Linktext

3voto

Stanley Punkte 4374

Wenn Sie den Wert der Originalvariablen nach der Übergabe an eine Funktion nicht mehr ändern wollen, sollte die Funktion mit einem " nach Wert übergehen Parameter".

Dann hat die Funktion ばかり den Wert, aber nicht die Adresse der übergebenen Variablen. Ohne die Adresse der Variablen kann der Code innerhalb der Funktion den Wert der Variablen von außerhalb der Funktion nicht ändern.

Wenn Sie der Funktion jedoch die die Möglichkeit, den Wert der Variablen zu ändern von außen gesehen, müssen Sie die als Referenz übergeben . Da sowohl der Wert als auch die Adresse (Referenz) übergeben werden und innerhalb der Funktion verfügbar sind.

3voto

Beispiele:

class Dog 
{ 
public:
    barkAt( const std::string& pOtherDog ); // const reference
    barkAt( std::string pOtherDog ); // value
};

const & ist im Allgemeinen am besten. Sie haben keine Nachteile bei der Erstellung und Zerstörung. Wenn die Referenz nicht konstant ist, suggeriert Ihre Schnittstelle, dass sie die übergebenen Daten ändern wird.

2voto

Monster Punkte 21

Kurz gesagt: Wertübergabe ist das, WAS es ist, und Referenzübergabe ist das, WO es ist.

Wenn Ihr Wert VAR1 = "Happy Guy!" ist, werden Sie nur "Happy Guy!" sehen. Wenn sich VAR1 in "Happy Gal!" ändert, werden Sie das nicht bemerken. Wenn er als Referenz übergeben wird und VAR1 sich ändert, erfahren Sie es.

1voto

Wertübergabe bedeutet, wie man einen Wert an eine Funktion übergibt, indem man Argumente verwendet. Bei der Wertübergabe werden die in der angegebenen Variablen gespeicherten Daten kopiert, was langsamer ist als die Referenzübergabe, da die Daten kopiert werden.

Oder wir nehmen Änderungen an den kopierten Daten vor. Die ursprünglichen Daten sind davon nicht betroffen. Bei der Referenzübergabe oder der Adressübergabe senden wir eine direkte Verbindung zur Variablen selbst. Oder wir übergeben einen Zeiger auf eine Variable. Das ist schneller, weil weniger Zeit verbraucht wird.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X