Per far restituire un vettore ad una funzione, devi fare uso dell'allocazione dinamica della memoria, mediante le funzioni
malloc e
free; la prima serve per allocare nello heap uno spazio di memoria di dimensione pari a quello che passerai come parametro, la seconda serve per liberare questo spazio, una volta che non ne avrai più bisogno (se non lo fai, lo spazio rimane allocato per tutta l'esecuzione del programma).
Suppongo tu stia lavorando su interi; la tua funzione dovrà essere qualcosa del genere:
Codice:
int* funzione(int[] array) {
/* Riserva in memoria lo spazio per un array di 20 interi */
int* arrayHeap = (int*) malloc(sizeof(int) * 20);
< fai fare alla funzione quello che deve fare >
/* Ritorna l'array creato */
return arrayHeap;
}
Lo stesso risultato
NON avresti potuto ottenerlo in questo modo:
Codice:
int* funzione(int[] array) {
int arrayDaRitornare[20];
< fai fare alla funzione quello che deve fare >
return arrayDaRitornare;
}
poiché arrayDaRitornare è una variabile locale e, in quanto tale, al termine dell'esecuzione della funzione, viene rimosso dalla memoria stack, assieme a tutte le altre variabili locali eventualmente dichiarate. L'ultima istruzione, infatti, ritorna un indirizzo alla prima posizione di un array non più esistente, con possibili errori in tempo di esecuzione se provassi a usare tale valore. Con la memoria heap, invece, il tempo di vita delle variabili è deciso dal programmatore.
Per maggiori informazioni, ti consiglio di cercare su un qualche motore di ricerca "allocazione dinamica della memoria". Ciao :)