2016-10-22 2 views
-2
#include <iostream> 
using namespace std; 

int rev(int& sourcenum) 
{ 
    int temp = sourcenum; 
    int sum = 0; 
    while (temp!=0) 
    { 
     sum*=10; 
     sum += temp%10; 
     temp/=10; 
    } 
    return sum; 
}; 

int main() { 
    int i,j; 

    cin >> i >> j; 

    int add = rev(i)+rev(j); 
    cout<<i<<" "<<j<<endl; 

    cout<<add<<endl; 
    cout<<rev(add); 

} 

In diesem Code kann ich nicht Parameter ändern i & j. Ich weiß nicht warum.Kann nicht Parameter aktualisieren i & j

+2

Ich bin verwirrt - Sie versuchen nicht, i, oder j, oder sourcenum – UKMonkey

+0

zu aktualisieren, warum 'sourcenum' in' int rev (int & sourcenum) 'als Referenz übergeben wird? Es ist nicht modifiziert. Wenn Sie es mit 'int rev (int sourcenum)' ändern, können Sie i auf der Aufrufebene durch das Ergebnis einer Berechnung ersetzen. – Franck

Antwort

3

In der ersten Zeile Ihrer rev(...)-Funktion machen Sie int temp = sourcenum;. Diese Anweisung kopiert den Wert aus der Variablen sourcenum, die Sie absichtlich korrekt als Referenz übergeben haben. Das Problem ist, dass temp ist jetzt eine neue unabhängige Variable, nur mit dem Wert der Variablen sourcenum initialisiert, die Sie als Referenz übergeben. Wenn Sie also jetzt temp ändern, wirkt sich das nicht auf die sourcenum aus.

Als minimale Vorschlag ändern: Falls ändern Sie int temp = sourcenum;-int& temp = sourcenum;, können Sie das Ergebnis der Änderung der übergebenen Referenz wie erwartet bekommen sollte.

+0

funktioniert nicht :(zeigt 0 – MoonJune

+0

@MoonJune: Sie müssen beachten, dass Ihre Programmflusslogik nicht mit meinem Kommentar korrigiert wurde. Um diese '0 0' Ausgabe zu beheben, müssen Sie Ihre Bedingung 'while (temp! = 0) 'etwas anderes zu sein, da es zum' 0 0'-Ausgang führt.Ich bin mir nicht sicher, was Sie mit diesem Code erreichen wollen, aber zumindest mit meiner Änderung 'i' und' j' sind Danach werden Ihre Fragen bezüglich des Pass-by-Reference-Vorgangs geklärt: Debuggen Sie Ihren Code und sehen Sie, wie Sie 'sourcenum' während der Ausführung ändern, um zu überprüfen, wo Sie einen logischen Fehler haben. –

Verwandte Themen