Vediamo di fare un po' di luce.
La differenza fra un intero e un puntatore ad intero è essenziale: un intero è un numero in memoria, un puntatore ad intero è un indirizzo di memoria dove è memorizzato un numero.

Gli array altro non sono che "puntatori": c'è una lista di interi e c'è un puntatore che serve per raggiungerli. Ciascun array, quindi, possiede implicitamente un puntatore al primo elemento, da cui poi si può raggiungere tutti gli altri sommandoci di volta in volta l'offset (1 per il secondo elemento, 2 per il terzo elemento, ecc).

Ma se non conosci la differenza fra un numero e il suo indirizzo in memoria si fa pochissima strada. E soprattutto se non sai distinguere fra un numero intero e una lista di numeri interi le cose si complicano ulteriorimente.

La tua funzione dovrebbe ricevere una lista di interi (e non un intero, ovviamente!) e dovrebbe restituire la stessa lista di interi invertita (e non un intero, ancora una volta!).

Quindi la tua funzione dovrebbe cambiare da così:
codice:
int inverso(int vett);
che significa "prendo un intero e restituisco un intero"...
a così:
codice:
int *inverso(int *vett);
che significa "prendo una lista di interi e restituisco una lista di interi".

Poi, la dichiarazione di inv_vett a livello globale non ha molto senso, ma non importa.


Fatta questa modifica devi riadattare la chiamata. Non puoi passare un intero, ma un vettore (come avevi fatto all'inizio) e, contestualmente, dovrai ricevere un vettore e non buttare via il risultato. Quindi:
codice:
inv_vett = inverso(vett);
che significa "ottengo nella variabile inv_vett l'inverso del vettore vett"...


Ciao.