2016-12-11 3 views
-3

Ich erwarte, dass der Ausgang 2 ist. Warum passiert das nicht? Eine einfache Erklärung, da ich gerade erst angefangen habe, C++ zu lernen. Könnten Sie dann erklären, warum die folgenden Ausbeuten 5:Warum berücksichtigt der Ausgang die Funktion nicht?

void func(int x) 
{ 
x = 2; 
} 


void function(int *x) 
{ 
*x = 5; 
} 

int main() 
{ 
int x = 3; 
func(x); 
function(&x); 
cout << "x = "<< x << endl; 
return 0; 
} 
+1

Mögliches Duplikat von [Wenn ich einen Parameter in einer Funktion ändere, ändert sich das auch für den Aufrufer?] (Http://stackoverflow.com/questions/1698660/when-i-change-a-parameter-inside -a-function-do-it-change-for-the-caller-too) –

+0

Siehe auch http://stackoverflow.com/questions/11736306/when-pass-a-variable-to-a-function-why- the-function-only-erhält-ein-Duplikat-von-th, http://stackoverflow.com/questions/21215409/does-compass-objects-by-value-or-reference und ein grundlegendes Tutorial zu C++ Funktionen: http://www.cplusplus.com/doc/tutorial/functions/, und für Ihr Zeigerbeispiel: http://cslibrary.stanford.edu/104/ (die C++ - Version). –

Antwort

1

ich heraus erwarten 2. gesetzt sein Warum ist das nicht passiert?

Weil Sie von Wert sind vorbei, ist der Parameter nur eine Kopie des ursprünglichen Arguments - so, was Sie x in func verändern nicht die ursprünglichen x in main nicht beeinträchtigt.

Wie Sie das Argument innerhalb der Funktion ändern müssen, C++ vorbei Referenz ist genau das, was Sie brauchen:

void func(int &x) 
{ 
    x = 2; 
} 

Wie bei Ihrer edit:

void function(int *x) 

Das heißt Pass - by-pointer - Wenn Sie einen Zeiger an x übergeben, können Sie x indirekt in main ändern. Dies wird normalerweise in C verwendet, aber Sie verwenden C++ pass-by-reference, da das obige Verfahren die bevorzugte Methode ist.

Verwandte Themen