In teoria dovresti scrivere

codice:
int * funzione(int V[], int N) {
int i;

for (i=0; i<N; i=i+2) {
if (V[i] < 0)
V[i] = i;
}
return V;
}
ma comunque un array viene passato alla funzione per riferimento (essendo un puntatore con dello spazio allocato) quindi quando lo modifichi all'interno della funzione, tali modifiche sono visibili anche nella funzione chiamante e quindi non hai alcun bisogno di restituire il valore esplicitamente... tra l'altro, in generale è una pessima tecnica quella di restituire con return un valore che per la funzione è anche di input... per quello esiste il passaggio per riferimento.