Renvoie le pointeur des fonctions en C

Nous avons vu dans le dernier chapitre comment la programmation C permet de renvoyer un tableau à partir d'une fonction. De même, C permet également de renvoyer un pointeur depuis une fonction. Pour ce faire, vous devrez déclarer une fonction renvoyant un pointeur comme dans l'exemple suivant -

int * myFunction() {
   .
   .
   .
}

Le deuxième point à retenir est que ce n'est pas une bonne idée de renvoyer l'adresse d'une variable locale en dehors de la fonction, vous devrez donc définir la variable locale comme static variable.

Maintenant, considérons la fonction suivante qui générera 10 nombres aléatoires et les retournera en utilisant un nom de tableau qui représente un pointeur, c'est-à-dire l'adresse du premier élément du tableau.

#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;
}

Lorsque le code ci-dessus est compilé et exécuté, il produit le résultat suivant -

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