salve ragazzi,
ho un problema nel passaggio di valori ad una funzione, ho da poco iniziato a studiare il c e ancora faccio una gran confusione tra puntatori, indirizzi e passaggi di valore alle funzioni.
Il compito del programma è quello di inserire, mediante una funzione, un valore all'interno di un lista ordinata contenente valori distinti

codice:
/*INCLUSIONE DELLE LIBRERIE*/
...

/*DEFINIZIONE DELLA LISTA*/
typedef struct elem_lista
{
   int valore;
   struct elem_lista *succ_p;
}elem_lista_t;

/*DICHIARAZIONE DELLA FUNZIONE*/
int inserisci_in_lista_ordinata(?)

int main(void)
{
   /*DICHIARAZIONE VARIABILI LOCALI*/
   int valore_da_inserire;
   ...

   /*DICHIARAZIONE DELLA LISTA*/
   elem_lista_t *p;

   /*CREAZIONE LISTA*/
   ...

   valore_ritornato = "?";    //RISULTATO RITORNATO DALLA FUNZIONE
   printf("%d\n", valore_ritornato);
   return(0);
}

/*DEFINIZIONE DELLA FUNZIONE*/
int inserisci_in_lista_ordinata(elem_lista_t **testa_p, int valore)
{
   int inserito;
   
   elem_lista_t  *corr_p, *prec_p, *nuovo_p;

   for(corr_p = prec_p = *testa_p;
        ((corr_p != NULL) && (corr_p->valore < valore));
        prec_p = corr_p, corr_p = corr_p->succ_p);

   if((corr_p != NULL) && (corr_p->valore == valore))
      inserito = 0;
   else
   {
      inserito = 1;
      nuovo_p = (elem_lista_t *)malloc(sizeof(elem_lista_t));
      nuovo_p->valore = valore;
      nuovo_p->succ_p = corr_p;
      if(corr_p == *testa_p)
         *testa_p = nuovo_p;
      else
         prec_p->succ_p = nuovo_p;
   }
   return(inserito);
}
La funzione "inserisci_in_lista_ordinata" restituisce 1 se l'inserimento può avere luogo, 0 altrimenti.
Il mio problema sta nella dichiarazione della funzione e nel richiamo della funzione all'interno del main (dove ci sono i punti interrogativi).
Qualcuno mi saprebbe spiegare come va dichiarata e richiamata una funzione di questo tipo? Help!!!