Passer des pointeurs aux fonctions d'Objective-C

Le langage de programmation Objective-C vous permet de passer un pointeur vers une fonction. Pour ce faire, déclarez simplement le paramètre de fonction en tant que type de pointeur.

En suivant un exemple simple où nous passons un pointeur long non signé à une fonction et modifions la valeur à l'intérieur de la fonction qui se reflète dans la fonction appelante -

#import <Foundation/Foundation.h>
 
@interface SampleClass:NSObject
- (void) getSeconds:(int *)par;
@end

@implementation SampleClass

- (void) getSeconds:(int *)par {
 /* get the current number of seconds */
   *par = time( NULL );
   return;
}

@end

int main () {
   int sec;

   SampleClass *sampleClass = [[SampleClass alloc]init];
   [sampleClass getSeconds:&sec];

   /* print the actual value */
   NSLog(@"Number of seconds: %d\n", sec );

   return 0;
}

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

2013-09-13 23:50:47.572 demo[319] Number of seconds: 1379141447

La fonction, qui peut accepter un pointeur, peut également accepter un tableau comme indiqué dans l'exemple suivant -

#import <Foundation/Foundation.h>
 
@interface SampleClass:NSObject
/* function declaration */
- (double) getAverage:(int *)arr ofSize:(int) size;
@end

@implementation SampleClass

- (double) getAverage:(int *)arr ofSize:(int) size {
   int    i, sum = 0;       
   double avg;

   for (i = 0; i < size; ++i) {
      sum += arr[i];
   }

   avg = (double)sum / size;
   return avg;
}

@end

int main () {

   /* an int array with 5 elements */
   int balance[5] = {1000, 2, 3, 17, 50};
   double avg;

   SampleClass *sampleClass = [[SampleClass alloc]init];
   /* pass pointer to the array as an argument */
   avg = [sampleClass getAverage: balance ofSize: 5 ] ;

   /* output the returned value  */
   NSLog(@"Average value is: %f\n", avg );

   return 0;
}

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

2013-09-14 00:02:21.910 demo[9641] Average value is: 214.400000