Arrays como argumentos a funciones

Si se quiere pasar todo un array a una función habrá que hacerlo por referencia, es decir, se pasa el puntero al inicio del array, es decir, el nombre del array, como acabamos de ver en el aparatdo anterior. En este caso hay que tener en cuenta que la función desconoce el tamaño del array, por lo que será el programador el responsable de que no se acceda más allá del límite, por ejemplo, pasando también como argumento a la función el tamaño del array.

 Ejemplo_Arr_5. Vamos a modificar el ejemplo de la sección anterior, de manera que incluimos una función que intercambia los datos de dos elementos del array.

#include <stdio.h>

 

int cambia_valores (int *arg1, int arg2, int arg3, int arg4);

 

int main ()

{

int x[5], i,indice_i,indice_j;

char saludo[]="Hola"; // mirar comentario de abajo

 

x[0] = 1;

for (i=1; i<5; i++)

  {

  printf ("%s. Dame el valor %d del array: ",saludo, i);

  scanf ("%d", x+i); //Recordar la aritmética de punteros

  }

 

printf("Valores del array original: %d %d %d %d %d\n", x[0],x[1],x[2],x[3],x[4]); 

 

printf ("Dame los dos indices de los datos a intercambiar: ");

scanf ("%d %d", &indice_i,&indice_j);

if (cambia_valores(x,5,indice_i,indice_j) == 0)

  {

  printf("Valores del array intercambiados: %d %d %d %d %d\n", x[0],x[1],x[2],x[3],x[4]); 

  }

return 0;

}

 

int cambia_valores (int *array, int tam, int indice1, int indice2)

{

int temp;

if (indice1>=tam || indice2>=tam)

  {

  printf("Alguno de los indices excede el tamaño del array\n");

  return(-1);

  }

temp = array[indice1];

array[indice1] = array[indice2];

array[indice2] = temp;

return 0;

}