"... porque funciona el paso por referencia sin declarar de una forma tradicional un puntero a estructura?..."
Porque es lo mismo pero sin hacer la asignacion:
Código C:
Ver originalagenda datos;//declaracion de la estructura
agenda *ptr_datos;//declaracion de un puntero a un tipo agenda
//llamada a la funcion enviando un puntero
mi_funcion(&datos);
//asignacion del puntero y llamada a la funcion enviando un puntero
ptr_datos = &datos;
mi_funcion(ptr_datos);
Nota que cuando usas el puntero en el segundo caso no necesitas referenciarlo con & porque ya es una referencia:
Código C:
Ver original//la sintaxi es correcta pero el funcionamiento no
mi_funcion(&ptr_datos);
Saludos
vosk