2010-07-31 29 views
5

Was sollte try() Funktion haben sollte, um die Ausgabe als 11 aus dem folgenden Programm zu erhalten?Wie ändere ich die Variable?

int main() 
{ 
    int x = 10; 
    try(); 
    printf("%d",x); 
    return 0; 
} 

try() 
{ 
    /* how to change x here?? */ 
} 

Antwort

1

Sie müssen einen Zeiger auf den Speicherort übergeben (eine Kopie des ursprünglichen Zeigers). Andernfalls ändern Sie nur eine Kopie des ursprünglichen Werts, der beim Beenden der Funktion nicht mehr vorhanden ist.

void Try(int *x); 

int main(...) 
{ 
    int x = 10; 
    Try(&x); 
    /* ... */ 
} 

void Try(int *x) 
{ 
    *x = 11; 
} 
+0

ja, aber es muss sein. –

+0

@Ronny: Es muss kein Zeiger sein, um es als eins zu übergeben. Die Adresse einer Variablen in C++ ist ein Zeiger auf dieselbe Variable. –

+0

@Ronny: Vereinbarung mit Computer Guru. Sie können einen Zeiger auf eine beliebige Variable erhalten, indem Sie das Symbol "&" verwenden. int x = 10; int * pX = & x; * pX = 5; Jetzt wird x gleich 5 sein. –

17

Um den Wert von x innerhalb einer Funktion zu ändern, haben try() einen Zeiger auf die Variable nehmen und es dort zu ändern.

z.B.

void try(int *x) 
{ 
    *x = 11; 
} 

int main() 
{ 
    int x = 10; 
    try(&x); 
    printf("%d",x); 
    return 0; 
} 
+1

Verwenden Sie keine Zeiger, es sei denn, Sie haben einen guten Grund dazu. Pass-by-Reference erledigt den Job genauso gut. –

+24

Das ist C-Code, nicht C++. Referenzen sind nicht verfügbar. –

+0

@Jeff: Guter Punkt. Ist es trotzdem? Als Anfängerfrage könnte er einfach c und C++ nach oben mischen und hat in der Sache keine besondere Vorliebe. –

4

Die anderen Antworten sind richtig. Die einzige Möglichkeit, eine Variable in einer anderen Funktion wirklich zu ändern, besteht darin, sie über einen Zeiger zu übergeben. Jeff Ms Beispiel ist hier das Beste.

Wenn sie nicht wirklich haben sein, dass genau die gleiche Variable, können Sie den Wert aus dieser Funktion zurückgeben kann, und neu zuweisen ihn der Variablen, ala:

int try(int x) 
{ 
    x = x + 1; 
    return x; 
} 

int main() 
{ 
    int x = 10; 
    x = try(x); 
    printf("%d",x); 
    return 0; 
} 

Eine weitere Option ist es, es global (aber nicht so oft - es ist extrem chaotisch!):

int x; 

void try() 
{ 
    x = 5; 
} 

int main() 
{ 
    x = 10; 
    try(); 
    printf("%d",x); 
    return 0; 
} 
+0

Bitte beachten Sie - da wir Anfänger-Tag sprechen, hier - dass try() muss 'x = x + 1 zurückgeben;' im ersten Beispiel ... –

+0

@djacobson: Wie in, da er ein Anfänger ist, mein Beispiel sollte richtig sein? :) OK, behoben. –

+0

+1 für die Bereitstellung vieler Optionen für die Lösung. –

Verwandte Themen