Il quesito che pongo è sicuramente più chiaro del titolo del thread

Ho il seguente sorgente:
codice:
struct list {
 int num;
 struct list *p;
};

struct list *funzione(struct list l);

struct list *funzione(struct list l) {
 return NULL;
}

int main()
{
 struct list *l = funzione(l); //<-- ricevo l'errore
 return 0;
}
Sostanzialmente sto provando a definire una struttura senza l'uso del typedef per rinominarla (come invece faccio sempre all'uni) in quanto ci sono degli aspetti (come l'uso dell' * davanti al nome della funzione) che non ho mai studiato.

L'errore mi viene segnalato quando tento di assegnare al puntatore l di tipo struct list il risultato della funzione "funzione(struct list l)" che anch'essa torna un puntatore di tipo struct list ma non comprendo il perchè.
Cosa sbaglio?


Grazie