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

referencias c++

Estas en el tema de referencias c++ en el foro de C/C++ en Foros del Web. hola.. una simple duda Código: int& a=x; esto quiere decir que "a" va a tener la misma direccion de memoria que "x". puedo interpretarlo asi? ...
  #1 (permalink)  
Antiguo 27/01/2011, 11:04
 
Fecha de Ingreso: junio-2010
Mensajes: 46
Antigüedad: 13 años, 10 meses
Puntos: 0
Pregunta referencias c++

hola.. una simple duda

Código:
int& a=x;
esto quiere decir que "a" va a tener la misma direccion de memoria que "x". puedo interpretarlo asi? se que referencia es un "alias" pero como puedo interpretarlo de manera "mas a fondo", asi?.

gracias.
  #2 (permalink)  
Antiguo 27/01/2011, 11:57
 
Fecha de Ingreso: enero-2008
Mensajes: 229
Antigüedad: 16 años, 3 meses
Puntos: 1
Respuesta: referencias c++

SI ASI ES, "a" VA A APUNTAR A LA DIRECCIÓN DE "x"
  #3 (permalink)  
Antiguo 27/01/2011, 12:04
 
Fecha de Ingreso: junio-2010
Mensajes: 46
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: referencias c++

NO!!.. jejeje amigo margarito04 te cuento que me acabas de confundir mas... preguntaba esto precisamente porque estoy confundiendo las referencias con los punteros.. jaja bueno una pregunta mas ¿en que se diferencia de un puntero? la unica diferencia que veo es que en una referencia no se le puede asignar mas de una direccion de memoria.

pd: te refieres a apuntar con que "a" va a acceder a la misma direccion de memoria que "x". mas no va a tener la misma direccion de memoria como pensaba? si es asi entonces no me confundistes :)
  #4 (permalink)  
Antiguo 27/01/2011, 12:23
Avatar de Munire  
Fecha de Ingreso: julio-2010
Ubicación: en el ciberdespacio (España)
Mensajes: 150
Antigüedad: 13 años, 9 meses
Puntos: 4
Respuesta: referencias c++

yo creo que se puede interpretar como otra forma de llamar a "x"

es como si creas un puntero

int *a=&x;

y utilizas el puntero para trabajar con "x"

*a=7;
b=*a;

solo que si lo haces por referencia

int &a = x;

puedes trabajar con "a" si desreferenciar (sin el *)

a=7;
b=a;

lo unico que no puedes reasignarla a otra variable
  #5 (permalink)  
Antiguo 28/01/2011, 10:27
 
Fecha de Ingreso: junio-2010
Mensajes: 46
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: referencias c++

ah ok. entonces a fin de cuentas Si va a almacenar una direccion de memoria correcto?
  #6 (permalink)  
Antiguo 28/01/2011, 10:56
Avatar de Munire  
Fecha de Ingreso: julio-2010
Ubicación: en el ciberdespacio (España)
Mensajes: 150
Antigüedad: 13 años, 9 meses
Puntos: 4
Respuesta: referencias c++

Cita:
ah ok. entonces a fin de cuentas Si va a almacenar una direccion de memoria correcto?
No, por que si imprimes "a" no te sale la direccion de memoria de "x", sale el valor de "a", es decir el valor de "x".
  #7 (permalink)  
Antiguo 28/01/2011, 10:57
 
Fecha de Ingreso: enero-2008
Mensajes: 229
Antigüedad: 16 años, 3 meses
Puntos: 1
Respuesta: referencias c++

Si exacto, pero a diferencia de los puntero esta direcciÓn nunca podrÁ ser modificada.
  #8 (permalink)  
Antiguo 28/01/2011, 12:07
 
Fecha de Ingreso: octubre-2010
Ubicación: Edo. de México
Mensajes: 94
Antigüedad: 13 años, 7 meses
Puntos: 9
Respuesta: referencias c++

ok, vamos a hacer un poco mas grafico el asunto.

digamos que tu declaras una variable llamada x, a esta variable x se le asigna una localidad de memoria para almacenar la informacion que quieres.

int x; //Reservamos 4 bytes (en la mayoria de los ordenadores de hoy en dia) de memoria
//Digamos que se reserva la localidad 83D (por ejemplificar nadamas)

ahora declaramos un puntero de tipo entero
int *a; //Ojo aqui a este puntero se le va a asignar una localidad de memoria tambien, pero el tipo de dato
// guardara sera una direccion de memoria (un apuntador) a un entero, digamos que se le asigna la
// localidad 84A (otra ves, es solo un ejemplo)

//ahora asignas valores
x = 50; //Entonces en la localidad 83D vamos a tener el dato 50 : 83D ----> 50
a = &x; // y en la localidad 84A vamos a tener guardada la localidad 83D: 84A ----> 83D

Mi Memoria
Localidad ||| Dato
-------------------------------
83D ||| 50
-------------------------------
84A ||| 83D
-------------------------------

Es por esto que puedes acceder al numero 50 a traves del apuntador "a", porque "a" sabe donde esta ese 50.
entonces no es que se les asigne la misma localidad de memoria, mas bien el apuntador guarda las direcciones.
  #9 (permalink)  
Antiguo 28/01/2011, 12:32
 
Fecha de Ingreso: junio-2010
Mensajes: 46
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: referencias c++

mm perfecto Trovaz gracias por el ejemplo grafico. a eso me referia. yo se que los punteros guardan solo direcciones de memoria y pueden acceder a el dato mediante el operador de desreferencia(*). pero entonces las referencias tambien actuan como un puntero? osea podemos decir que las referencias guardan la direccion de memoria de una variable como lo hace un puntero (asi lo interpreta el compilador) y entonces cuando lo usamos como un "alias" lo que hace es que el compilador lo "auto desreferencia" para trabajar unicamente con el valor de esa direccion de memoria almacenada y no modificar la direccion como tal. eso es lo que puedo imaginarme yo.. estoy en lo cierto? , si no entonces ¿como interpreta el compilador las referencias?

gracias
  #10 (permalink)  
Antiguo 28/01/2011, 13:50
 
Fecha de Ingreso: octubre-2010
Ubicación: Edo. de México
Mensajes: 94
Antigüedad: 13 años, 7 meses
Puntos: 9
Respuesta: referencias c++

Me alegra que te de curiosidad ese tipo de detalles, me parece que hay varias tecnicas para la asignacion y acceso a la memoria que puede ocupar un programa. Te recomiendo que leas un buen libro de compiladores como "Compiladores: principios, técnicas y herramientas", ahi te enseñan las tecnicas utilizadas para la asignacion de memoria. Son temas muy interesantes y te van a ayudar mucho a entender los lenguajes de programacion,
  #11 (permalink)  
Antiguo 28/01/2011, 16:59
 
Fecha de Ingreso: junio-2010
Mensajes: 46
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: referencias c++

Cita:
Iniciado por Trovaz Ver Mensaje
Me alegra que te de curiosidad ese tipo de detalles, me parece que hay varias tecnicas para la asignacion y acceso a la memoria que puede ocupar un programa. Te recomiendo que leas un buen libro de compiladores como "Compiladores: principios, técnicas y herramientas", ahi te enseñan las tecnicas utilizadas para la asignacion de memoria. Son temas muy interesantes y te van a ayudar mucho a entender los lenguajes de programacion,
ok amigo Trovaz, seguire tu consejo y buscare un buen libro de compiladores. siempre me causa curiosidad como trabaja el compilador por eso hice esta pregunta. por ahora me quedo con que "a" es un alias de "x" (es el significado que le da todo libro de programacion a las referencias). en fin muchas gracias.

pd: si alguien mas quiere añadir algo pues bienvenido sea ;)
  #12 (permalink)  
Antiguo 02/02/2011, 22:30
 
Fecha de Ingreso: junio-2010
Mensajes: 46
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: referencias c++

encontre esto en esta pagina http://www.zator.com/Cpp/E4_2_3.htm

Cita:
Las referencias son un tipo de dato C++ estrechamente relacionado con los punteros. Una referencia de un objeto no es un objeto [5], en el sentido que no tiene su propio espacio de almacenamiento como ocurre con los punteros, y en consecuencia no pueden realizarse con ellas muchas de las operaciones que se relacionan con objetos. Por ejemplo obtener su dirección, crearlas con el operador new, o crear matrices de referencias.
entonces, en definitiva las referencias no almacenan direcciones de memoria, ni son un objeto en si.. son simplemente "alias" mas nada..

Etiquetas: c++, 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 12:29.