Passer des tableaux comme arguments de fonction dans Objective-C

Si vous souhaitez passer un tableau unidimensionnel en tant qu'argument dans une fonction, vous devez déclarer le paramètre formel de la fonction de l'une des trois manières suivantes et les trois méthodes de déclaration produisent des résultats similaires car chacune indique au compilateur qu'un pointeur entier va être reçu. De la même manière, vous pouvez passer un tableau multidimensionnel en tant que paramètres formels.

Voie-1

Paramètres formels comme pointeur comme suit. Vous étudierez ce qu'est le pointeur dans le prochain chapitre.

- (void) myFunction(int *) param {
.
.
.
}

Voie-2

Paramètres formels sous forme de tableau dimensionné comme suit -

- (void) myFunction(int [10] )param {
.
.
.
}

Voie-3

Paramètres formels sous forme de tableau non dimensionné comme suit -

-(void) myFunction: (int []) param {
.
.
.
}

Exemple

Maintenant, considérons la fonction suivante, qui prendra un tableau comme argument avec un autre argument et en fonction des arguments passés, elle retournera la moyenne des nombres passés à travers le tableau comme suit -

-(double) getAverage:(int []) arr andSize:(int) size {
   int    i;
   double avg;
   double sum;

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

   avg = sum / size;
   return avg;
}

Maintenant, appelons la fonction ci-dessus comme suit -

#import <Foundation/Foundation.h>
 
@interface SampleClass:NSObject

/* function declaration */
-(double) getAverage:(int []) arr andSize:(int) size;

@end

@implementation SampleClass

-(double) getAverage:(int []) arr andSize:(int) size {
   int    i;
   double avg;
   double sum =0;

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

   avg = 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 andSize: 5] ;
 
   /* output the returned value */
   NSLog( @"Average value is: %f ", avg );

   return 0;
}

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

2013-09-14 03:10:33.438 demo[24548] Average value is: 214.400000

Comme vous pouvez le voir, la longueur du tableau n'a pas d'importance en ce qui concerne la fonction car Objective-C n'effectue aucune vérification de limites pour les paramètres formels.