Pointeur de retour des fonctions d'Objective-C

Comme nous l'avons vu dans le dernier chapitre comment le langage de programmation Objective-C permet de renvoyer un tableau à partir d'une fonction, de la même manière Objective-C vous permet de renvoyer un pointeur à partir d'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 à l'extérieur 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 renverra en utilisant un nom de tableau, qui représente un pointeur, c'est-à-dire l'adresse du premier élément du tableau.

#import <Foundation/Foundation.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();
      NSLog(@"%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++ ) {
      NSLog(@"*(p + [%d]) : %d\n", i, *(p + i) );
   }
 
   return 0;
}

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

2013-09-13 23:32:30.934 demo[31106] 1751348405
2013-09-13 23:32:30.934 demo[31106] 1361314626
2013-09-13 23:32:30.934 demo[31106] 833264711
2013-09-13 23:32:30.934 demo[31106] 1700550876
2013-09-13 23:32:30.934 demo[31106] 1164219218
2013-09-13 23:32:30.934 demo[31106] 1083527138
2013-09-13 23:32:30.934 demo[31106] 1465344952
2013-09-13 23:32:30.934 demo[31106] 849888001
2013-09-13 23:32:30.934 demo[31106] 1220494938
2013-09-13 23:32:30.934 demo[31106] 2095604466
2013-09-13 23:32:30.934 demo[31106] *(p + [0]) : 1751348405
2013-09-13 23:32:30.934 demo[31106] *(p + [1]) : 1361314626
2013-09-13 23:32:30.934 demo[31106] *(p + [2]) : 833264711
2013-09-13 23:32:30.934 demo[31106] *(p + [3]) : 1700550876
2013-09-13 23:32:30.934 demo[31106] *(p + [4]) : 1164219218
2013-09-13 23:32:30.934 demo[31106] *(p + [5]) : 1083527138
2013-09-13 23:32:30.934 demo[31106] *(p + [6]) : 1465344952
2013-09-13 23:32:30.934 demo[31106] *(p + [7]) : 849888001
2013-09-13 23:32:30.934 demo[31106] *(p + [8]) : 1220494938
2013-09-13 23:32:30.934 demo[31106] *(p + [9]) : 2095604466