Hemos recabando en diferentes espacios para tenerte la respuesta para tu inquietud, si tienes alguna duda puedes dejarnos tu comentario y te contestaremos sin falta, porque estamos para ayudarte.
Solución:
Referencia significa tomar la dirección de una variable existente (usando &) para establecer una variable de puntero. Para que sea válido, un puntero debe establecerse en la dirección de una variable del mismo tipo que el puntero, sin el asterisco:
int c1;
int* p1;
c1 = 5;
p1 = &c1;
//p1 references c1
desreferenciación un puntero significa usar el operador * (carácter de asterisco) para recuperar el valor de la dirección de memoria a la que apunta el puntero: NOTA: El valor almacenado en la dirección del puntero debe ser un valor DEL MISMO TIPO que el tipo de variable el puntero “apunta”, pero hay sin garantía este es el caso a menos que el puntero se haya configurado correctamente. El tipo de variable al que apunta el puntero es el tipo menos el asterisco más externo.
int n1;
n1 = *p1;
Desreferenciación no válida puede o no causar accidentes:
- La desreferenciación de un puntero no inicializado puede provocar un bloqueo
- La desreferenciación con una conversión de tipo no válida tendrá el potencial de causar un bloqueo.
- Eliminar la referencia de un puntero a una variable que se asignó dinámicamente y luego se desasignó puede provocar un bloqueo
- Quitar la referencia de un puntero a una variable que desde entonces ha quedado fuera del alcance también puede provocar un bloqueo.
Referencia inválida es más probable que cause errores del compilador que bloqueos, pero no es una buena idea confiar en el compilador para esto.
Referencias:
C++ pointers – reference and dereference operators
& is the reference operator and can be read as “address of”.
* is the dereference operator and can be read as “value pointed by”.
http://www.cplusplus.com/doc/tutorial/pointers/
& is the reference operator
* is the dereference operator
http://en.wikipedia.org/wiki/Dereference_operator
The dereference operator * is also called the indirection operator.
Siempre los he escuchado usados en el sentido opuesto:
-
&
es el operador de referencia: le da una referencia (puntero) a algún objeto -
*
es el operador de desreferencia: toma una referencia (puntero) y le devuelve el objeto al que se hace referencia;
Para empezar, los tienes al revés: &
es referencia y *
es la desreferencia.
Hacer referencia a una variable significa acceder a la dirección de memoria de la variable:
int i = 5;
int * p;
p = &i; //&i returns the memory address of the variable i.
Desreferenciar una variable significa acceder a la variable almacenada en una dirección de memoria:
int i = 5;
int * p;
p = &i;
*p = 7; //*p returns the variable stored at the memory address stored in p, which is i.
//i is now 7
Te invitamos a añadir valor a nuestro contenido asistiendo con tu veteranía en las acotaciones.