elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: AIO elhacker.NET 2021 Compilación herramientas análisis y desinfección malware


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Dudas con las referencias
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Dudas con las referencias  (Leído 2,903 veces)
Dark Invader

Desconectado Desconectado

Mensajes: 111


Lucha hasta el final para conseguir tu objetivo.


Ver Perfil
Dudas con las referencias
« en: 26 Julio 2011, 15:46 pm »

Hola a todos,resulta que tengo este codigo:
Código
  1. int& maxref(int& a, int& b)
  2. {
  3. if (a >= b)
  4. return a;
  5. else
  6. return b;
  7. }
  8.  
  9. maxref(i, j) = 0;

He estado practicando con referencias sencillas,como por ejemplo:
Código
  1. int i=2;
  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:

Código
  1. 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:

Código
  1. int a =3;
  2. int j = 5;
  3. int funcion(&a,&j);
  4.  
  5. int funcion(int *a ,int *b){
  6. 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


« Última modificación: 26 Julio 2011, 16:37 pm por Dark Invader » En línea

El_Java

Desconectado Desconectado

Mensajes: 144



Ver Perfil WWW
Re: Dudas con las referencias
« Respuesta #1 en: 26 Julio 2011, 23:52 pm »

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
  1. return (a >= b ? a : b);
Si no existe el ?: como en C++, puedes quitar el else, porque es innecesario
Código
  1. if(a >= b) return a;
  2. return b;

Un saludo :)


En línea

leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: Dudas con las referencias
« Respuesta #2 en: 26 Julio 2011, 23:56 pm »

Sí que está el operador ternario en C  :)
En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
Dark Invader

Desconectado Desconectado

Mensajes: 111


Lucha hasta el final para conseguir tu objetivo.


Ver Perfil
Re: Dudas con las referencias
« Respuesta #3 en: 27 Julio 2011, 09:18 am »

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
En línea

4rkn63l

Desconectado Desconectado

Mensajes: 199



Ver Perfil
Re: Dudas con las referencias
« Respuesta #4 en: 27 Julio 2011, 09:34 am »

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
  1. return a;
o
Código
  1. 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.
En línea

Dark Invader

Desconectado Desconectado

Mensajes: 111


Lucha hasta el final para conseguir tu objetivo.


Ver Perfil
Re: Dudas con las referencias
« Respuesta #5 en: 27 Julio 2011, 13:37 pm »

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

Un saludo
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Referencias
Programación Visual Basic
Sancho.Mazorka 2 2,460 Último mensaje 1 Enero 2007, 08:35 am
por Sancho.Mazorka
Referencias a objetos
Java
zardanic 2 3,078 Último mensaje 13 Mayo 2008, 21:25 pm
por zardanic
Referencias en PHP
PHP
madpitbull_99 0 2,616 Último mensaje 4 Junio 2011, 00:01 am
por madpitbull_99
Problema al buscar Referencias en la IAT
Ingeniería Inversa
.:UND3R:. 2 2,516 Último mensaje 15 Agosto 2011, 07:21 am
por apuromafo CLS
Problema con Referencias
Ingeniería Inversa
KarlBluet 0 2,200 Último mensaje 21 Septiembre 2011, 00:06 am
por KarlBluet
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines