Programmation en C – Retourner un pointeur depuis une fonction en C

Nous avons vu dans le dernier chapitre comment la programmation C permet de renvoyer un tableau d’une fonction. Pareil, C permet également de renvoyer un pointeur d’une fonction. Pour ce faire, vous devez déclarer une fonction renvoyant un pointeur comme dans l’exemple suivant :

int * maFonction() {
   .
   .
   .
}

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

Considérons maintenant la fonction suivante qui va générer 5 nombres aléatoires et les retourner en utilisant un nom de tableau qui représente un pointeur, c’est-à-dire, l’adresse du premier élément de tableau.

#include <stdio.h>
#include <time.h>
 
/* Fonction pour générer et renvoyer des nombres aléatoires. */
int * getRand( ) {

   static int  r[5];
   int i;
 
   srand( (unsigned)time( NULL ) );
 
   for ( i = 0; i < 5; ++i) {
      r[i] = rand();
      printf("%dn", r[i] );
   }
 
   return r;
}
 
/* la fonction principale à appeler au-dessus de la fonction définie */
int main () {

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

   p = getRand();
 
   for ( i = 0; i < 5; 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 :

1225331821
616767184
1261897512
1800503365
2014773297
*(p + [0]) : 1225331821
*(p + [1]) : 616767184
*(p + [2]) : 1261897512
*(p + [3]) : 1800503365
*(p + [4]) : 2014773297

 

Laisser un commentaire

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