Pasar matrices como argumentos de función en Objective-C

Si desea pasar una matriz unidimensional como argumento en una función, tendría que declarar el parámetro formal de la función en una de las siguientes tres formas y los tres métodos de declaración producen resultados similares porque cada uno le dice al compilador que un puntero entero va para ser recibido. De manera similar, puede pasar una matriz multidimensional como parámetros formales.

Camino-1

Parámetros formales como puntero de la siguiente manera. Estudiarás qué es un puntero en el próximo capítulo.

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

Camino-2

Parámetros formales como una matriz de tamaño de la siguiente manera:

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

Camino-3

Parámetros formales como una matriz sin tamaño de la siguiente manera:

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

Ejemplo

Ahora, considere la siguiente función, que tomará una matriz como argumento junto con otro argumento y, según los argumentos pasados, devolverá el promedio de los números pasados ​​a través de la matriz de la siguiente manera:

-(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;
}

Ahora, llamemos a la función anterior de la siguiente manera:

#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;
}

Cuando el código anterior se compila y se ejecuta, produce el siguiente resultado:

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

Como puede ver, la longitud de la matriz no importa en lo que respecta a la función porque Objective-C no realiza ninguna verificación de límites para los parámetros formales.