Originariamente inviato da oregon
E' sbagliato perché tu devi lavorare con un puntatore alla lista.

E' solo per permettere di modificare il puntatore che lo passi come doppio puntatore, ma NON parti da un doppio puntatore.

E' come dire che lavori con un numero intero ma per modificarlo lo passi per puntatore alle funzioni. Ma il tuo dato rimane un int nel main.
Mmm. Come dicevo, sono una frana coi puntatori. Davvero non mi entrano ancora completamente in testa, soprattutto quando si inizia a parlare di puntatori di puntatori.
Correggimi se sbaglio:
Prodotto_t *np è un puntatore. Passando np come parametro a una funzione f(), la f lo tratterà come puntatore e potrà modificarlo
Prodotto_t **lista è un puntatore di puntatori. Per modificarlo, a questo punto, non basta passare direttamente lista alla funzione, perchè non passerebbe l'indirizzo del puntatore, ma solo l'elemento puntato. Per questo è necessario procedere come da te descritto.

Qualcosa l'ho capita o sono proprio fuori strada?