Ver Mensaje Individual
  #4 (permalink)  
Antiguo 29/06/2010, 21:30
margarito04
 
Fecha de Ingreso: enero-2008
Mensajes: 229
Antigüedad: 16 años, 10 meses
Puntos: 1
Respuesta: paso de una estructura por referencia o por valor

en cuanto a tu pregunta de que si un puntero y una referencia es lo mismo, en cierta forma si.
ya que un puntero apunta a una direccion d memoria, al giual que una referencia. La diferencia esta en que el puntero puede modificar la direccion de memoria a la que esta apuntando una referencia no. Por ejemplo

int main()
{
int x=12;
int *pX;
pX=&x;
int &rX= x;
printf("%p %p %p", &x, &ref, pX);
}

si tu corres el programa anterior veras que todos apuntan a la misma dirección. La referencia ademas tiene una ventaja, que es que se comporta como una variable normal. e incluso para acceder a su miembro utilizas el operador . y no ->.

Con respecto de cuando utilizar un paso por referencia o un paso por valor. Es la respuesta es siempre que quieras pasar un objecto(una estructrua o una clase) pasala como referencia, la ventaja es que evitas hacer una copia inecesaria y cuando los datos de una estructura son grandes, esto representa una gran ventaja.

por ejemplo
struct estruct1
{
int x;
};
void cambiarValor(estruct1 &obj)
{
obj.x =12;
}
void imprimir(const estruct1 &obj)
{

printf("%d",obj.x);
}

int main()
{
estruct1 obj;

cambiarValor(obj);
imprimir(obj);
return 0;
}

como puedes observar a en imprimir he agregado la palabra reservad const, la cual indica que el valor de la estructura no va ser modificado solo accesado. Esto sirve para diferenciar de los objectos que si van a ser modificados dentro de la funcion como en el caso de cambiar valor en la que no inclui const