Restituisce il puntatore dalle funzioni in C

Abbiamo visto nell'ultimo capitolo come la programmazione in C consenta di restituire un array da una funzione. Allo stesso modo, C consente anche di restituire un puntatore da una funzione. Per fare ciò, dovresti dichiarare una funzione che restituisce un puntatore come nell'esempio seguente:

int * myFunction() {
   .
   .
   .
}

Il secondo punto da ricordare è che non è una buona idea restituire l'indirizzo di una variabile locale al di fuori della funzione, quindi dovresti definire la variabile locale come static variabile.

Consideriamo ora la seguente funzione che genererà 10 numeri casuali e li restituirà utilizzando un nome di array che rappresenta un puntatore, cioè l'indirizzo del primo elemento dell'array.

#include <stdio.h>
#include <time.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("%d\n", 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:

1523198053
1187214107
1108300978
430494959
1421301276
930971084
123250484
106932140
1604461820
149169022
*(p + [0]) : 1523198053
*(p + [1]) : 1187214107
*(p + [2]) : 1108300978
*(p + [3]) : 430494959
*(p + [4]) : 1421301276
*(p + [5]) : 930971084
*(p + [6]) : 123250484
*(p + [7]) : 106932140
*(p + [8]) : 1604461820
*(p + [9]) : 149169022