Dudas con las referencias

Iniciado por Dark Invader, 26 Julio 2011, 15:46 PM

0 Miembros y 1 Visitante están viendo este tema.

Dark Invader

Hola a todos,resulta que tengo este codigo:

int& maxref(int& a, int& b)
{
if (a >= b)
return a;
else
return b;
}

maxref(i, j) = 0;


He estado practicando con referencias sencillas,como por ejemplo:

int i=2;
int& iref = i;


Lo malo es que en las funciones de este tipo me lio un poco,veamos se pasa la los parametros i,j y la funcion recoje la memoria donde están almacenados ambos,luego imaginemos que a es mayor que b,retorna a,pero ¿que retorna exactamente?¿su direccion de memoria?.Lo que si se es que el valor retornado se le asigna el valor de 0 pero lo que no entiendo bien es:

int& maxref

He probado también a ponerlo sin el apersand,y me da el mismo valor¿es que estoy haciendo dos cosas iguales?Porque lo que me despista es eso,lo demas para nada.

Puede parecer un poco simple,pero he trabajado con muchas funciones de pasar los parametros por valor y por referencia tipo:

int a =3;
int j = 5;
int funcion(&a,&j);

int funcion(int *a ,int *b){
etc}


Pero nunca tuve que usar este tipo,he buscado algo de información pero no me lo ha dejado suficientemente claro...Si alguien me pudiera echar un cable se lo agradeceria.

Un saludo

El_Java

No soy un experto en esto, pero creo que lo que hace la funcion es que devuelve int&, osea, la dirección de la función que resulta que es mas grande de las dos, al trabajar por referencia no se hacen copias, se trabaja directamente con la variable, y lo que capta & es la dirección.

Pd. podrias mejorar el codigo bastante, no sé si estan el operador ternario en C, pero podrias hacer:
Código (cpp) [Seleccionar]
return (a >= b ? a : b);
Si no existe el ?: como en C++, puedes quitar el else, porque es innecesario
Código (cpp) [Seleccionar]
if(a >= b) return a;
return b;


Un saludo :)

leogtz

Sí que está el operador ternario en C  :)
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

Dark Invader

Gracias El java,el codigo no es mio por eso no utilice el operador ternario,es un codigo de prueba que estaba en un tutorial...Ahora bien,esto es pasar por referencia,pero como ya dije yo usaba otra nomenclatura¿es distinta o es lo mismo?¿porque si al quitar el operador & de la funcion sigue dando el mismo resultado? :-\

Un saludo

4rkn63l

Te sigue dando el mismo resultado por que los parametros (a y b) siguien siendo referencias a las variables originales, recuerda que las referencias se utilizan como aliases, por lo tanto cuando pones un
Código (cpp) [Seleccionar]
return a; o
Código (cpp) [Seleccionar]
return b; estas devolviendo un entero, pero ademas ese entero puede ser modificado por que se refiere a la variable original que fue pasada por referencia. Por eso poner o no el ampersand no afecta el resultado.

Dark Invader

Entiendo,muchas gracias 4rkn63l y a El java,me habeis solucionado la duda.  :P

Un saludo