Pasar matrices como argumentos de función en C

Si desea pasar una matriz unidimensional como argumento en una función, tendría que declarar un parámetro formal de 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. Del mismo modo, puede pasar matrices multidimensionales como parámetros formales.

Camino-1

Parámetros formales como puntero -

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

Camino-2

Parámetros formales como una matriz de tamaño -

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

Camino-3

Parámetros formales como una matriz sin tamaño -

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

Ejemplo

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

double getAverage(int arr[], int size) {

   int i;
   double avg;
   double sum = 0;

   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:

#include <stdio.h>
 
/* function declaration */
double getAverage(int arr[], int size);

int main () {

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

   /* pass pointer to the array as an argument */
   avg = getAverage( balance, 5 ) ;
 
   /* output the returned value */
   printf( "Average value is: %f ", avg );
    
   return 0;
}

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

Average value is: 214.400000

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