Programmation en C – Fonction qui retourne un tableau

La programmation C ne permet pas de renvoyer tout le tableau comme argument à une fonction. Toutefois, vous pouvez retourner un pointeur vers un tableau en spécifiant le nom du tableau sans indice. Si vous souhaitez retourner un tableau à partir d’une fonction, vous devrez déclarer une fonction renvoyant un pointeur comme dans l’exemple suivant :
 
 

int * maFonction() {
   .
   .
   .
}

Le deuxième point à retenir est que C ne préconise pas de renvoyer l’adresse d’une variable locale à l’extérieur de la fonction, de sorte que vous devriez définir la variable locale comme variable statique.

Maintenant, considérons la fonction suivante qui va générer 10 nombres aléatoires et les retourner en utilisant un tableau.

#include <stdio.h>

/* Fonction pour générer et retourner des nombres aléatoires */
int * Random( ) {

   static int  r[10];
   int i;

   /* Définir la graine */
   srand( (unsigned)time( NULL ) );
  
   for ( i = 0; i < 10; ++i) {
      r[i] = rand();
      printf( "r[%d] = %dn", i, r[i]);
   }

   return r;
}

/* Fonction principale qui va appeler la fonction ci-dessus*/
int main () {

   /* Un pointeur vers un entier  */
   int *p;
   int i;

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

   return 0;
} 

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

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

 

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *