Ver Mensaje Individual
  #5 (permalink)  
Antiguo 27/05/2015, 06:52
eferion
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 10 años, 1 mes
Puntos: 204
Respuesta: Problema con estructuras y punteros en C

Dado que "empleado" es un puntero, para acceder a sus miembros tienes utilizar el operador '->' en vez del operador '.':
Código C:
Ver original
  1. int main ()
  2. {
  3.    persona *empleado;
  4.    func(&(empleado->nombre));
  5. }

Otra posibilidad si la anterior, que es la más habitual y natural, no te gusta:
Código C:
Ver original
  1. int main ()
  2. {
  3.    persona *empleado;
  4.    func(&(*empleado).nombre);
  5. }

Para el otro caso:

Código C:
Ver original
  1. int main ()
  2.     {
  3.        persona *empleado;
  4.        func(&(empleado.nombre.dni))
  5.      
  6.     }

Lamento decirte que "nombre" es de tipo "char*", es decir, no es una estructura y no tiene un miembro llamado "dni". Si revisas la definición de tu estructura, verás que "dni" se encuentra en la estructura "ninio", y el único campo de tipo "ninio" de la estructura "persona" se encuentra bajo el nombre "hijos", que además es un puntero.

Con todo esto la llamada quedaría así:

Código C:
Ver original
  1. int main ()
  2. {
  3.    persona *empleado;
  4.    int x;
  5.    func(&(empleado->hijos[x].dni));
  6. }

Donde x debería tener un valor válido entre 0 y el número de elementos del arreglo "hijos"