Restituisce array dalla funzione in C

La programmazione C non consente di restituire un intero array come argomento di una funzione. Tuttavia, è possibile restituire un puntatore a un array specificando il nome dell'array senza un indice.

Se vuoi restituire un array monodimensionale da una funzione, dovresti dichiarare una funzione che restituisce un puntatore come nell'esempio seguente:

int * myFunction() {
   .
   .
   .
}

Il secondo punto da ricordare è che C non raccomanda di restituire l'indirizzo di una variabile locale all'esterno della funzione, quindi dovresti definire la variabile locale come static variabile.

Ora, considera la seguente funzione che genererà 10 numeri casuali e li restituirà usando un array e chiamerà questa funzione come segue:

#include <stdio.h>

/* function to generate and return random numbers */
int * getRandom( ) {

   static int  r[10];
   int i;

   /* set the seed */
   srand( (unsigned)time( NULL ) );
  
   for ( i = 0; i < 10; ++i) {
      r[i] = rand();
      printf( "r[%d] = %d\n", i, r[i]);
   }

   return r;
}

/* main function to call above defined function */
int main () {

   /* a pointer to an int */
   int *p;
   int i;

   p = getRandom();
	
   for ( i = 0; i < 10; i++ ) {
      printf( "*(p + %d) : %d\n", i, *(p + i));
   }

   return 0;
}

Quando il codice precedente viene compilato insieme ed eseguito, produce il seguente risultato:

r[0] = 313959809
r[1] = 1759055877
r[2] = 1113101911
r[3] = 2133832223
r[4] = 2073354073
r[5] = 167288147
r[6] = 1827471542
r[7] = 834791014
r[8] = 1901409888
r[9] = 1990469526
*(p + 0) : 313959809
*(p + 1) : 1759055877
*(p + 2) : 1113101911
*(p + 3) : 2133832223
*(p + 4) : 2073354073
*(p + 5) : 167288147
*(p + 6) : 1827471542
*(p + 7) : 834791014
*(p + 8) : 1901409888
*(p + 9) : 1990469526