2010-07-31 13 views
5

cosa dovrebbe cercare la funzione try() per ottenere l'output come 11 dal programma in basso?Come cambiare la variabile?

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

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

risposta

1

È necessario passare un puntatore alla posizione di memoria (una copia del puntatore originale). Altrimenti si sta solo modificando una copia del valore originale che è andato via quando la funzione si chiude.

void Try(int *x); 

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

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

sì, ma deve essere. –

+0

@Ronny: Non ha bisogno di essere un puntatore per passarlo come uno. L'indirizzo di qualsiasi variabile in C++ è un puntatore a quella stessa variabile. –

+0

@Ronny: Accordo con Computer Guru. È possibile ottenere un puntatore a qualsiasi variabile utilizzando il simbolo "&". int x = 10; int * pX = & x; * pX = 5; Ora x sarà uguale a 5. –

17

Per modificare il valore di x all'interno di una funzione, hanno try() prendere un puntatore alla variabile e cambiare lì.

esempio,

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

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

Non utilizzare i puntatori a meno che non si abbia una buona ragione per farlo. Pass-by-reference fa il lavoro altrettanto bene. –

+24

Questo è il codice C, non C++. I riferimenti non sono disponibili. –

+0

@Jeff: buon punto. È però? Come una domanda per principianti, poteva semplicemente mescolare c e C++, e in realtà non aveva particolari preferenze in materia. –

4

Le altre risposte sono corrette. L'unico modo per cambiare veramente una variabile all'interno di un'altra funzione è passarlo tramite puntatore. L'esempio di Jeff M è il migliore, qui.

Se non hanno davvero essere che esattamente lo stesso variabile, è possibile restituire il valore da quella funzione, e ri-assegnare alla variabile, ala:

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

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

Un'altra opzione è quella di fare è globale (ma non farlo molto spesso - è estremamente caotico!):

int x; 

void try() 
{ 
    x = 5; 
} 

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

Nota: dato che stiamo parlando di tag beginner, ecco che try() deve restituire x = x + 1; 'nel primo esempio ... –

+0

@djacobson: Come in, dal momento che è un principiante, il mio esempio dovrebbe essere corretto? :) OK, risolto. –

+0

+1 per fornire molte opzioni per la soluzione. –

Problemi correlati