Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprende Devolución de Arreglos desde la Función | Function Return Values Specification
Funciones en C++

Devolución de Arreglos desde la Función

Desliza para mostrar el menú

Existe una limitación crucial: solo se pueden devolver arreglos dinámicos desde las funciones. Esta restricción surge debido al alcance local de las funciones; los arreglos estáticos creados dentro de una función solo son accesibles dentro de esa función.

Si intentas devolver un arreglo creado localmente, te encontrarás con una limitación debido al alcance de la función (intentarás devolver la dirección de variables inexistentes, lo que provocará un error).

Devolución de un arreglo dinámico

A diferencia de las variables locales, que se desasignan cuando la función finaliza, la memoria dinámica asignada usando new[] permite que los datos sobrevivan más allá del alcance de la función donde fueron creados. Como resultado, podemos acceder a variables creadas dentro de la función utilizando sus direcciones.

Para devolver un arreglo dinámico, debemos usar los siguientes especificadores de tipo en la firma de la función:

  • dataType* para un arreglo unidimensional.
  • dataType** para un arreglo bidimensional.
main.cpp

main.cpp

12345678910111213141516171819
#include <iostream> // Function to create and return a dynamic 1D array int* createArray(const int size) { int* arr = new int[size]; for (int i = 0; i < size; ++i) arr[i] = i + 1; // Example initialization return arr; } int main() { int size = 5; int* myArray = createArray(size); // Don't forget to delete the dynamically allocated memory delete[] myArray; }

La función asigna dinámicamente memoria para un arreglo de enteros del tamaño especificado. Inicializa los elementos del arreglo con valores desde 1 hasta el size del arreglo. La función devuelve un puntero al primer elemento del arreglo de enteros asignado dinámicamente que ahora puede ser utilizado en el bloque main().

main.cpp

main.cpp

1234567891011121314151617181920212223242526272829303132333435
#include <iostream> // Function to create and return a dynamic 2D array int** createArray(const int rows, const int cols) { int** arr = new int*[rows]; for (int i = 0; i < rows; ++i) { arr[i] = new int[cols]; for (int j = 0; j < cols; ++j) { arr[i][j] = i * cols + j + 1; // Example initialization } } return arr; } int main() { int rows = 3; int cols = 2; int** myArray = createArray(rows, cols); // Use the returned 2D array for (int i = 0; i < rows; ++i) { for (int j = 0; j < cols; ++j) { std::cout << myArray[i][j] << " "; } std::cout << std::endl; } // Don't forget to delete the dynamically allocated memory for (int i = 0; i < rows; ++i) { delete[] myArray[i]; } delete[] myArray; return 0; }

El principio es el mismo que al devolver un arreglo unidimensional: la única diferencia es que debemos devolver un puntero al arreglo de punteros utilizando el especificador de tipo int** para retornar el arreglo bidimensional.

question mark

¿Cuál afirmación sobre el retorno de arreglos desde funciones es correcta?

Selecciona la respuesta correcta

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 3. Capítulo 2

Pregunte a AI

expand

Pregunte a AI

ChatGPT

Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla

Sección 3. Capítulo 2
some-alt