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