Entweder du übergibst den Pointer an doit und liferst ihn an die aufrufende funktion mir return zurück und weisst ihn in main zu:
void main()
{
[...]
ptr_first=doit(taste, ptr_first);
[...]
}
Adresse ptr_first doit(char taste, Adresse *ptr_first)
{
[...]
return *ptr_first;
}
Oder du übergibst einen pointer auf den Pointer. (Finde ich schöner

) Dann brauchst du nichts zurückliefern und auch nichts zuweisen:
void main()
{
[...]
doit(taste, *ptr_first);
[...]
}
void doit(char taste, Adresse **ptr_first)
{
[...]
}