Generell ist das möglich, sollte aber aus Sicherheitsgründen nicht so gemacht werden.

Wenn du einen Pointer an eine Funktion übergibst, so sollte sie als "value" übergeben werden, da du sonst die Adresse des Pointers bekommst.

Schau dir deine Definitionen genau an!

Eine Funktion darf keine Adresse aus seinem lokalen Speicher zurückgeben, da nach Return die Adresse nicht mehr gültig ist. Dies ist nur mit globalen (bzw. Static) Variablen möglich.

Gutes Design ist das nicht, da du dann von außerhalb Inhalte verändern oder zerstören kannst.

Ein Pointer zeigt nur auf eine Adresse, was dahinter gespeichert ist, kann allenfalls MCH-Fehler auslösen. und zeigt ansonsten Unsinn.