Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Referencias &

Estas en el tema de Referencias & en el foro de C/C++ en Foros del Web. Hola, me gustaría saber que diferencia hay entre: int &maximo (int a, int b) {return ( a>b a : b )} int maximo (int a, ...
  #1 (permalink)  
Antiguo 02/08/2011, 15:15
 
Fecha de Ingreso: marzo-2011
Mensajes: 94
Antigüedad: 13 años, 1 mes
Puntos: 3
Referencias &

Hola, me gustaría saber que diferencia hay entre:

int &maximo (int a, int b) {return ( a>b a : b )}

int maximo (int a, int b){return ( a>b a : b )}

La diferencia que yo veo es que con el primero puedo hacer:

int & c = maximo (a, b);

pero no entiendo muy bien por que. Alguien que me pueda instruir un poco del tema??

Un saludo!!
  #2 (permalink)  
Antiguo 02/08/2011, 15:51
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Referencias &

Proba este ejemplo
Código C++:
Ver original
  1. void cambiar(int & a) {a = 1;}
  2.  
  3. void cambiar2(int a) {a = 2;}
  4.  
  5. using namespace std;
  6.  
  7. int main()
  8. {
  9.     int entero = 0;
  10.     cambiar(entero);
  11.     cout << entero<< endl;
  12.     cambiar2(entero);
  13.     cout << entero << endl;
  14.  
  15. }

Vas a notar que el primer llamado modifico la variable entero pero el segundo no. Pasar una variable por referencia o devolver la referencia es parecido a los punteros. Nada mas que como referencia vos usas la variable como si fue declarada. No tenes que usar el operador * para modifcar su valor.

A nivel memoria no estoy muy claro como se maneja.

El ejemplo que pusiste no se si es muy util, porque estarias devolviendo una referencia a un entero que no es statico, este pierde sentido al volver de la funcion.

Pero saliendo de ese problema. Con la primera implementacion, cualquier modificacion que hagas en c se hara sobre el mayor de los dos.

Saludos
  #3 (permalink)  
Antiguo 02/08/2011, 16:41
 
Fecha de Ingreso: marzo-2011
Mensajes: 94
Antigüedad: 13 años, 1 mes
Puntos: 3
Respuesta: Referencias &

Entiendo tu ejemplo, pero no entiendo eso de devolver referencias en una funcion. Escribo una declaracion de una funcion que devuelve int & y escribo return a. Qué estoy devolviendo exactamente?? La direccion de la variable a?? la variable a?? tampoco entiendo por que hay que escribir const en la siguiente funcion:

Código C++:
Ver original
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int maximo ( int &, int & );
  6.  
  7. int maximo ( int &a, int &b ){
  8.    
  9.     return ( a > b ? a : b );
  10.    
  11. }
  12.  
  13. int main (){
  14.    
  15.     int a = 5, b = 9;
  16.    
  17.     const int &c = maximo ( a, b );
  18.    
  19.     cout << c << endl;
  20.    
  21.     getchar();
  22.    
  23.     return 0;
  24.    
  25. }
  #4 (permalink)  
Antiguo 02/08/2011, 21:18
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 15 años, 10 meses
Puntos: 61
Respuesta: Referencias &

cuando devuelves una referencia, devuelves la variable.

Es completamente posible hacer

maximo( a, b ) = 50;

y lo que indicas es que quieres asignar a la variable que tenga el maximo entre a y b el valor 50.

Luego de eso la variable retornada tendra el valor cambiado a 50.
  #5 (permalink)  
Antiguo 03/08/2011, 02:51
 
Fecha de Ingreso: marzo-2011
Mensajes: 94
Antigüedad: 13 años, 1 mes
Puntos: 3
Respuesta: Referencias &

Pero si haces " int maximo (int &, int &) " no devuelves también la variable? o es que devuelves una copia de la variable? en ese caso la diferencia es que si en lugar de eso haces " int & maximo ... " lo que devuelves es la variable mas grande, en concreto la que le pasas y no una copia ¿? aver si lo entendi bien... jeje

Un saludo!
  #6 (permalink)  
Antiguo 03/08/2011, 03:42
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 15 años, 10 meses
Puntos: 61
Respuesta: Referencias &

Si la funcion es declarada

int maximo

solo esta retornando un valor, da lo mismo la variable que haya tenido este.

Al definir asi: int & maximo

estas devolviendo una variable, la que en particular tiene un valor.
  #7 (permalink)  
Antiguo 03/08/2011, 04:41
 
Fecha de Ingreso: marzo-2011
Mensajes: 94
Antigüedad: 13 años, 1 mes
Puntos: 3
Respuesta: Referencias &

Ok ahora lo entiendo bien, muchisimas gracias

Etiquetas: referencias
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:30.