Ver Mensaje Individual
  #5 (permalink)  
Antiguo 15/02/2008, 09:16
Avatar de _Lucifer_
_Lucifer_
 
Fecha de Ingreso: junio-2006
Mensajes: 1.662
Antigüedad: 18 años, 5 meses
Puntos: 28
Re: Pasar estructuras por referencia

En primer lugar tienes el error que menciona aloqui, te falta el & en el llamado de la función para obtener la dirección de la estructura y poder pasarla por dirección, no por referencia...el paso por referencia se hace usando referenciadores y es algo que pertecena a C++.

Otro error que tienes es el siguiente:
Código:
void LeerFecha(struct fecha *Date)
{
	Date.day=1;
	Date.month=2;
	Date.year=3;
}
Debería ser algo así:
Código:
void LeerFecha(struct fecha *Date)
{
	Date->day=1;
	Date->month=2;
	Date->year=3;
}
O algo así:
Código:
void LeerFecha(struct fecha *Date)
{
	(*Date).day=1;
	(*Date).month=2;
	(*Date).year=3;
}
Recuerda que estás pasando un puntero y debes desreferenciarlo para poder acceder a su contenido. Las dos formas que te coloqué son equivalentes, aunque yo prefiero la primera, es más limpia y fácil de leer.

@TemplarK :
Cita:
Mas que aclarar o responder a tu pregunta yo vengo a complicarla, me he perdido un poco, si los arreglos se pasan a funciones solo por referencia, los arreglos de estructuras, estimo tambien lo hacen, sin embargo en el codigo que inserto a continuacion en la funcion debo trabajar con (.) en lugar de (->) a que se debe??
...
Los arreglos se pasan por dirección, los arreglos de estructuras o de lo que sea también. Debes trabajar con el "." porque al acceder al arreglo usando el operador "[]" estás dereferenciando el puntero (la segunda forma que coloqué antes), si quisieras acceder a la pos 2 del arreglo lo harías así:
Código:
...
arreglo[2].edad = 20;
...
pero también podrías acceder así:
Código:
...
(arreglo +2)->edad = 20;
...
Tomen en cuenta que lo que se coloca entre corchetes ("[]") es el desplazamiento con respecto a la primera posición de memoria del arreglo.

Cita:
...
otro punto que me confunde es que si no uso fflush(stdin); no me permite ingresar los datos... que estoy haciendo mal?
...
Debes usarlo porque la función gets te obliga a ello.

Saludos
__________________
Si crees que no tiene sentido, etonces probablemente lo tenga... :arriba: