Ciao a tutti. Avrei bisogno di alcuni chiarimenti riguardo le strutture nel linguaggio C. Prendendo ad esempio questa parte di codice (è la prima volta che scrivo sul forum, essendo il codice abbastanza lungo ho inserito solo una parte in quanto ciò che mi interessa è in che modo vengono utilizzate in questo caso le strutture)

codice:
#include <stdio.h>
#include <math.h>

struct phaseSpace {
  double x; 
  double v;
};
     
/* I PROTOTIPI */
     
struct phaseSpace *initHarmonicOscillator(double m_x0, double m_v0);
struct phaseSpace *euler(double m_dt, double m_omega2,  struct phaseSpace *m_pXAndV);

int main(void) {

...

  struct phaseSpace xAndV;

...

}

/*********************************/
struct phaseSpace  *initHarmonicOscillator(double x0, 
					   double v0) {
  static struct phaseSpace xAndV; 
  xAndV.x = x0;
  xAndV.v = v0;
  return &xAndV;
}

/*********************************/
struct phaseSpace *euler(double dt, double omega2, 
                         struct phaseSpace *pXAndVOld) {
  static struct phaseSpace xAndVNew;

  xAndVNew.v = (*pXAndVOld).v + 
    forceHarmonicOscillator(omega2, (*pXAndVOld).x) * dt;

  xAndVNew.x = pXAndVOld->x + pXAndVOld->v * dt;
  return &xAndVNew;
}
Oltre al mio libro, ho letto anche la parte sullo struct nella guida sul C in questo sito, ma ancora non sono riuscito a capire chiaramente come vengono utilizzate in questo codice. Prima viene dichiarato lo struct contenente due variabili di tipo double, dopodiché viene dichiarato un puntatore della struttura? Cioè cosa rappresenta

codice:
struct phaseSpace *euler(double dt, double omega2,  struct phaseSpace *pXAndVOld)
viene dichiarata un'istanza che ha come nome un puntatore a una funzione?

Scusatemi se sto dicendo baggianate ma ci sto sbattendo la testa da ieri e ancora non sono riuscito a capire