Dev - C++ - Paso por referencia

 
Vista:

Paso por referencia

Publicado por María (1 intervención) el 06/11/2018 20:59:32
Buenas, alguien me puede explicar cuándo usar los pasos por referencia? Cuando me lo explican lo entiendo pero cuando lo tengo que aplicar al código, no sé cómo hacerlo.
Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Xavi

Paso por referencia

Publicado por Xavi (1 intervención) el 07/11/2018 07:33:42
Como vimos las funciones por lo general reciben parámetros, éstos hasta el momento fueron pasados a la función mediante el "paso por valor" que consiste en hacer un copia del argumento, para que la función trabaje con la copia y no con el argumento original.

Esto significa que si la función modificara el valor, el original no se alteraría ya que estamos manejando una copia. Esto resulta bastante útil para asegurarnos de que la función no modifique nuestros argumentos de manera accidental.

Pero surgen dos problemas:
1.- Podríamos querer modificar el argumento original y no una copia.
2.- Con mucha cantidad de variables (o estructuras como veremos) el paso por valor (copiando) puede resultar un gasto excesivo de memoria.

Para resolver estos problemas contamos con las referencias y punteros, por el momento nos ocuparemos de las referencias.

Una referencia a una variable es un "alias" de la variable. Para indicarle a C++ que estamos hablando de una referencia y no una variable anteponemos al nombre el caracter ampersand (&).

Por ejemplo una referencia llamada refPresupuesto apuntando a un valor double se escribiría así:

double &refPresupuesto

Si quisieramos que una función trabaje con la variable original y no con una copia podríamos indicarle a la función que reciba el parametro como una referencia, veamos un ejemplo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//Paso por referencia
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
void elevarCuadrado (int &); //prototipo de funcion que recibe una referencia a un int
int main()
{
  int x = 0; //Declaracio e inicializacion en 0.
  cout << "Ingrese x para elevarlo al cuadrado" << endl;
  cin >> x;
  cout << "antes de elevarse es " << x <<endl;
  elevarCuadrado(x); //Notar que la llamada no es diferente a un paso por valor.
  cout << "x despues de elevarse es " << x << endl;//muestra el valor modificado por la funcion
  return 0;
}
void elevarCuadrado (int &y ) //funcion que no devuelve nada (void) y recibe una referencia a un int en este caso (x)
{
  y = y*y; //La funcion no devuelve ningun valor, pero modifica el argumento original (x)
  //ya que estamos trabajando con una referencia.
}

Cuando una función se declara anteponiendo la palabra reservada void le estamos diciendo a C++ que esa función no devolverá valor alguno.

Como se comenta en el código, en la llamada de la función es importante notar que no hay manera de darse cuenta si el parámetro es pasado por referencia (modificable) o si es por valor (se le envía una copia a la función).


NOTA: Este texto no es mio, es copiado de: http://codigomaldito.blogspot.com/2005/11/paso-por-referencia.html
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar