2010-07-31 16 views
5

¿qué debería probar la función() debería tener la salida como 11 del programa a continuación?¿Cómo cambiar la variable?

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

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

Respuesta

1

Debe pasar un puntero a la ubicación de la memoria (una copia del puntero original). De lo contrario, solo está modificando una copia del valor original que se va cuando la función finaliza.

void Try(int *x); 

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

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

Sí, pero tiene que ser así. –

+0

@Ronny: no necesita ser un puntero para pasarlo como uno. La dirección de cualquier variable en C++ es un puntero a esa misma variable. –

+0

@Ronny: Estoy de acuerdo con Computer Guru. Puedes obtener un puntero a cualquier variable usando el símbolo "&". int x = 10; int * pX = & x; * pX = 5; Ahora x será igual a 5. –

17

Para cambiar el valor de x desde dentro de una función, han try() tomar un puntero a la variable y cambiar allí.

por ejemplo,

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

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

No use punteros a menos que tenga una buena razón para hacerlo. Pass-by-reference hace el trabajo igual de bien. –

+24

Este es el código C, no C++. Las referencias no están disponibles. –

+0

@Jeff: Buen punto. ¿Sin embargo, lo es? Como una pregunta para principiantes, él podría estar mezclando c y C++, y realmente no tiene ninguna preferencia particular en el asunto. –

4

Las otras respuestas son correctas. La única forma de cambiar realmente una variable dentro de otra función es pasarla a través de un puntero. El ejemplo de Jeff M es el mejor, aquí.

Si en realidad no tiene por qué ser exactamente la misma variable, se puede devolver el valor de esa función, y volver a asignar a la variable, Ala:

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

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

Otra opción es hacer es global (pero no hagas esto muy a menudo - ¡es extremadamente desordenado!):

int x; 

void try() 
{ 
    x = 5; 
} 

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

Tenga en cuenta, ya que estamos hablando de la etiqueta de principiante, aquí, que try() necesita 'devolver x = x + 1;' en el primer ejemplo ... –

+0

@djacobson: Como en, ya que él es un principiante, mi ejemplo debería ser correcto? :) OK, arreglado. –

+0

+1 para proporcionar muchas opciones para la solución. –

Cuestiones relacionadas