C++ Devolver un array desde una función
C++ no permite devolver un array completo como argumento de una función. Sin embargo, puede devolver un puntero a un array especificando el nombre del array sin índice.
Si desea devolver un array unidimensional desde una función, debe declarar una función que devuelva un puntero, como sigue:
Como en el siguiente ejemplo:
Ejemplo
{
int myArray[3] = {1, 2, 3};
return myArray;
}
Nota:No puedes simplemente devolver un puntero a un array local, porque cuando la función termina, el array local será destruido y el puntero que apunta a él se volverá inválido.
C++ no admite devolver la dirección de una variable local fuera de la función, a menos que la variable local se defina comostaticvariable.
Para evitar la situación anterior, puedes usar un array estático o un array asignado dinámicamente.
Usar un array estático requiere crear un array estático dentro de la función y devolver su dirección, por ejemplo:
{
static int myArray[3] = {1, 2, 3};
return myArray;
}
Ahora, veamos la siguiente función, que generará 10 números aleatorios y los devolverá usando un array, de la siguiente manera:
Ejemplo
Cuando el código anterior se compila y ejecuta, produce los siguientes resultados:
624723190 1468735695 807113585 976495677 613357504 1377296355 1530315259 1778906708 1820354158 667126415 *(p + 0) : 624723190 *(p + 1) : 1468735695 *(p + 2) : 807113585 *(p + 3) : 976495677 *(p + 4) : 613357504 *(p + 5) : 1377296355 *(p + 6) : 1530315259 *(p + 7) : 1778906708 *(p + 8) : 1820354158 *(p + 9) : 667126415
Usar un array asignado dinámicamente requiere usar el operador new dentro de la función para asignar un array, y usar el operador delete al final de la función para liberar el array, por ejemplo:
Ejemplo
{
int* myArray = new int[3];
myArray[0] = 1;
myArray[1] = 2;
myArray[2] = 3;
return myArray;
}
int main()
{
int* result = myFunction();
// Usar result
delete[] result;
return 0;
}
El siguiente es un ejemplo de aplicación simple que demuestra cómo devolver un array desde una función:
Ejemplo
using namespace std;
int* createArray(int size) {
int* arr = new int[size];
for (int i = 0; i < size; i++) {
arr[i] = i + 1;
}
return arr;
}
int main() {
int* myArray = createArray(5);
for (int i = 0; i < 5; i++) {
cout << myArray[i] << " ";
}
cout << endl;
delete[] myArray; // Liberar memoria
return 0;
}
En el ejemplo anterior, declaramos una función llamada createArray que acepta un parámetro entero size y devuelve un array de enteros lleno de enteros. Usamos el operador new para asignar dinámicamente un array en el montón y rellenamos el array dentro de la función. Finalmente, la función devolvió un puntero al array.
En la función main, llamamos a la función createArray y almacenamos el puntero al array devuelto en myArray. Luego recorrimos el array e imprimimos el valor de cada elemento. Finalmente, usamos el operador delete[] para liberar la memoria ocupada por myArray, evitando así una fuga de memoria.
Cuando el código anterior se compila y ejecuta, produce los siguientes resultados:
1 2 3 4 5
Nota:Cuando se usa un array asignado dinámicamente, el código que llama a la función es responsable de liberar el array devuelto. Esto se debe a que el array asignado dentro de la función no se libera automáticamente al final de la función.
Otras extensiones
C++ Arrays