Tu non gli passi l'indirizzo di un array, ovvero di uno spazio di memoria allocato, gli passi un valore
casuale perché il puntatore è locale al main, ma anche se lo inizializzassi a NULL non otterresti niente.

O allochi memoria con malloc nel main(), e poi la funzione si limita a gestirlo come un array dinamico, o allochi memoria nella funzione e la restituisci al puntatore nel main().


codice:
// Alloco memoria nella funzione e la restituisco al main con return
#include <stdio.h>
 #include <stdlib.h>
 int* funzione();
 int main()
 {
     int *v=NULL;
     v=funzione();
     printf("%d", v[3]);
     getchar();
     return 0;
 }
 int* funzione()
 {
     int i,n;
     int *vettore = (int*) malloc(5*sizeof(int));
     for(i=0; i<5; i++)
         {
             vettore[i]=i;
             n = vettore[i];
         }
     return vettore;
 }

// alloco memoria nel main e gestisco come array


#include <stdio.h>
 #include <stdlib.h>
 void funzione(int *);
 int main()
 {
     int *v=(int*) malloc(5*sizeof(int));
     funzione(v);
     printf("%d", v[3]);
     getchar();
     return 0;
 }
 void funzione(int *vettore)
 {
     int i,n;
     
     for(i=0; i<5; i++)
         {
             vettore[i]=i;
             n = vettore[i];
         }
     
 }