Cómo Pasar Una Matriz A Una Función

Tabla de contenido:

Cómo Pasar Una Matriz A Una Función
Cómo Pasar Una Matriz A Una Función

Video: Cómo Pasar Una Matriz A Una Función

Video: Cómo Pasar Una Matriz A Una Función
Video: Paso de matrices a funciones como parámetros - Ejercicios en lenguaje de programación C 2024, Abril
Anonim

Las matrices son una de las formas más utilizadas de almacenamiento de datos estructurados en programas informáticos. Su procesamiento puede realizarse mediante varios algoritmos implementados en métodos y funciones de clase. En consecuencia, a menudo se requiere pasar una matriz a una función. Los lenguajes C y C ++ ofrecen una gran libertad para elegir los métodos para realizar esta acción.

Cómo pasar una matriz a una función
Cómo pasar una matriz a una función

Es necesario

compiladores de lenguajes C y C ++

Instrucciones

Paso 1

Pase una matriz de tamaño fijo a la función. Cambie el prototipo de la función para que contenga un argumento del tipo apropiado. Por ejemplo, la declaración de una función que toma una matriz de valores numéricos enteros de tres elementos como parámetro podría verse así:

void ArrayFunction (int aNumbers [3]);

Dicha función se llama pasándole una matriz directamente como argumento:

anular SomeFunction ()

{

int aNumbers = {1, 2, 3};

ArrayFunction (aNumbers);

}

Los datos transferidos se copian en la pila. La modificación de la matriz en la función llamada no cambia la fuente.

Paso 2

Pase matrices de longitud variable a la función. Para hacer esto, simplemente no especifique la dimensión del argumento correspondiente:

void ArrayFunction (int aNumbers );

Las matrices multidimensionales también se pueden pasar de manera similar (solo la primera "dimensión" pueden ser variables):

void ArrayFunction (int aNumbers [3] [2]);

Estas funciones se llaman de la misma forma que en el primer paso.

Para poder procesar correctamente matrices de longitud variable en una función, debe pasar explícitamente el número de sus elementos a través de un parámetro adicional o usar convenciones que imponen restricciones sobre los valores de los elementos mismos (un cierto valor debe ser un signo del final de la matriz).

Paso 3

Pase la matriz por puntero. El argumento de la función debe ser un puntero a un valor con un tipo correspondiente a los elementos de la matriz. Por ejemplo:

void ArrayFunction (int * pNumbers);

El acceso a los datos en una función se puede realizar tanto en la notación para trabajar con elementos de matriz como usando aritmética de direcciones:

void ArrayFunction (int * pNumbers)

{

pNumbers [0] = 10; // acceso al elemento 0

* (pNumbers + 1) = 20; // acceso al elemento 1

}

¡Ten cuidado! Dado que a la función no se le pasa una copia de los datos, sino un puntero, se modificará la matriz original.

La ventaja de este método es la rapidez, economía de recursos computacionales y cierta flexibilidad. Entonces, puede llamar a la función de destino pasándole un puntero a un elemento arbitrario de la matriz:

anular SomeFunction ()

{

int aNumbers = {1, 2, 3};

ArrayFunction (aNumbers); // matriz completa

ArrayFunction (& aNumbers [1]); // a partir del segundo elemento

}

Este método también suele implicar pasar el número de elementos disponibles en un parámetro adicional o utilizar un terminador de matriz.

Paso 4

Pasar datos a una función con un parámetro que sea un objeto o una referencia a un objeto de la clase que implementa la funcionalidad de matriz. Dichas clases o plantillas de clases se encuentran generalmente en bibliotecas y marcos populares (QVector en Qt, CArray en MFC, std:: vector en STL, etc.).

A menudo, estas clases implementan una estrategia implícita de intercambio de datos con recuento de referencias, realizando una copia profunda solo cuando se modifican los datos (copia en escritura). Esto le permite minimizar el consumo de recursos computacionales incluso en el caso de pasar objetos de matriz por valor a través de los argumentos de funciones y métodos:

void ArrayFunction (QVector oArray)

{

int nItemCount = oArray.count ();

int nItem = oArray [0];

}

anular SomeFunction ()

{

QVector oArray (10);

para (int i = 0; i

Recomendado: