Dado que "empleado" es un puntero, para acceder a sus miembros tienes utilizar el operador '->' en vez del operador '.':
Código C:
Ver originalint main ()
{
persona *empleado;
func(&(empleado->nombre));
}
Otra posibilidad si la anterior, que es la más habitual y natural, no te gusta:
Código C:
Ver originalint main ()
{
persona *empleado;
func(&(*empleado).nombre);
}
Para el otro caso:
Código C:
Ver originalint main ()
{
persona *empleado;
func(&(empleado.nombre.dni))
}
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 originalint main ()
{
persona *empleado;
int x;
func(&(empleado->hijos[x].dni));
}
Donde x debería tener un valor válido entre 0 y el número de elementos del arreglo "hijos"