51. C++ || Arrays paso por parámetro



En muchas ocasiones vamos a necesitar hacer uso de funciones en nuestros programas C++, de igual manera, vamos a tener, algunas veces, que pasar arrays como parámetros. Para esto primero debemos tener en claro una cosa: Todos los arrays se pasan por referencia.

Así que el programador deberá tener sumo cuidado de no modificar el array dentro de la función. El compilador trata automáticamente la llamada de la función como si hubiera colocado el operador de dirección & delante del nombre del array.

Para saber cómo pasar arrays como parámetros debemos ir a lo primero. Hacer el prototipo de la función. Esto se hace de la misma manera como lo hemos hecho anteriormente, la diferencia ahora será la inclusión de los corchetes que indican que la variable es un array. Por ejemplo:

void prototipo(int array[100]);

Ahora esta función tomará como parámetro un array de cien enteros.

Pero también lo podríamos hacer de la siguiente manera:

void prototipo(int array[], int max);

Dejando los corchetes vacíos, donde “max” representa la cantidad máxima de elementos que tiene el array. Ahora toca ver cómo llamar la función y enviar el array. Para esto haremos otro ejemplo con un array que contenga una suma de elementos que luego será mostrado por pantalla.

cout << “La suma total es: “ << suma(suma, max) << endl;

//Y la función no sería difícil de crear. 

int suma(int suma[], int max){
 int sumaTotal = 0;
 for(int i = 0; i < max; i++){
  sumaTotal += suma[i];
 }
 return sumaTotal;
}

Como pueden ver, a la hora de llamar a la función sólo necesitamos enviar el nombre del array. Veamos un ejemplo más completo.

#include <iostream>
using namespace std;

void pedirDatos(int suma[], int max);
int totalSuma(int suma[5]);

int main(){
 int max = 5;
 int suma[max];
 pedirDatos(suma,max);
 cout << "Suma total: " << totalSuma(suma) << endl;
 return 0;
}

void pedirDatos(int suma[],int max){
        cout << "Introducir elementos" << endl;
 for(int i = 0; i < max; i++){
  cin >> suma[i];
 }
}

int totalSuma(int Suma[5]){
 int sumaTotal = 0;
 for(int i = 0; i < 5; i++){
  sumaTotal += Suma[i];
 }
 return sumaTotal;
}

Este programa lo que hace es ingresar números a un array y luego sumarlos para obtener un total. Pueden notar los dos prototipos de funciones. Uno:

void pedirDatos(int suma[], int max);

Se ha declarado con dos parámetro, y no se le ha indicado el tamaño del array suma.

El segundo prototipo:
int totalSuma(int suma[5]);

Se ha declarado con un sólo parámetro, el array. Además que se ha especificado el tamaño máximo de elementos.

Esto se hizo con el fin de que tú puedas diferenciar entre ambas formas, las dos son válidas. Y en algunos casos, convendrá utilizar una más que otra.

Arrays de n dimensiones como parámetros


En este caso, podemos dejar vacío los corchetes de las filas, pero siempre deberemos rellenar las dimensiones siguientes del array, por ejemplo:

void arrayBidimensional(int ejemplo[][], max);

El prototipo anterior produce un error.

Por eso, la única dimensión que puede quedar vacía, es la primera, es decir, la de las filas. La siguiente sería una declaración correcta del mismo prototipo.

void arrayBidimensional(int ejemplo[][99], max);

Aquí igualmente “max” es la variable que contiene la dimensión máxima de las filas. El siguiente prototipo no requería el parámetro max:

void arrayBidimensional(int ejemplo[99][99]); //Ya no se necesita max

En fin, la sintaxis es la misma que la anterior, sólo que todas las dimensiones después de la primera deben estar establecidas en los prototipos de funciones.

void establecerSalarios(float semana[][100], int maxFila);
void mostrarMes(int mes[4][30]);
void ejemplo(long arregloNDimensiones [][10][10][10][10][10][10][10], int maxFila);
void ejemplo(long arregloNDimensiones [10][10][10][10][10][10][10][10]);


No hay comentarios