4

Me pregunto si se podra cambiar el valor de una variable externa de entrada que es tratada como parámetro de una función, recuerdo haber visto una manera de hacerlo pero no me acuerdo muy bien.

Supongamos que usamos una función para la suma de dos números, la cual tiene dos parámetros, se introducirá el primer parámetro una variable con el valor 5, y en el segundo una constante de valor 3.

int numero = 5;

void sumaNumero(int num1, int num2){
    num1 = num1 + num2;
}

sumaNumero(numero, 3);
cout << "Resultado de la suma = " << numero << endl;

El resultado de la suma se debería almacenaría almacenar en la variable. ¿Este procedimiento en verdad funcionaria?

Asahi Sara
  • 465
  • 2
  • 6
  • 18

2 Answers2

3

Tal y como lo planteas, no.

Pero ... haciendo un pequeño cambio ...

int numero = 5;

void sumaNumero(int &num1, int num2){
  //                ^ fijate en eso
  num1 = num1 + num2;
}

sumaNumero( numero, 3 );
cout << "Resultado de la suma = " << numero << endl;

Con el código original, estabas pasando el argumento por valor, con lo cual lo que obtenías dentro de la función era una copia, y sus posibles cambios quedaban limitados al interior de la función.

Con la modificación que te indico, lo pasas por referencia; de este modo, cualquier modificación si es visible fuera de la función.

Puedes consultar ¿Cual es la diferencia entre int * e int &? para más información.

Trauma
  • 25,297
  • 4
  • 37
  • 60
2

Tienes que usar una referencia:

void sumaNumero(int& num1, int num2){
//                 ^
    num1 = num1 + num2;
}

También se podría hacer con punteros, pero entonces el código sería un poco más feo (y sin motivo aparente en este caso):

void sumaNumero(int* num1, int num2){
//                 ^
    *num1 = *num1 + num2;
}

sumaNumero(&numero, 3);

Aunque para casos concretos como el de tu ejemplo yo te sugeriría devolver el valor vía return ya que el resultado es más lógico:

int sumaNumero(int num1, int num2){
    return num1 + num2;
}
eferion
  • 49,291
  • 5
  • 30
  • 72