Passando (NODO *) se vuoi aggiungere un elemento in testa devi perforza ritornare (NODO *) e assegnarlo nel main.
Passare (NODO **) ti permette di modificare la testa senza dover necessariamente ritornare (NODO *).
Se dovessi sviluppare un qualcosa che agisca in tutta sicurezza io farei così:Almeno concettualmente.codice:#include <stdbool.h> typedef struct {...} NODO; typedef NODO *LISTA; bool funzione(LISTA *l, ...) { ... NODO *testa = *l; ... return fail?false:true; }
Ciò anche perché le allocazioni di memoria non sono sempre possibili e, in caso di fallimento, bisogna lasciare il programma in uno stato consistente per lasciare decidere cosa fare al main e permettere il rilascio della memoria allocata.
Questo è quello che farei io ed è solo un'opinione.
Avere come valore di ritorno (NODE *) ti da il vantaggio di poter passare direttamente il valore ritornato a qualche altra funzione, ma questa occasione (in C) avviene raramente e in più non può essere in alcun modo sicura perchè, anche volessimo passare come parametro una &flag, poi non avremmo modo di controllarla.

Rispondi quotando