C++ Devolver un array desde una función

C++ 数组C++ Arrays

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:

int * myFunction() { //. . . }

Como en el siguiente ejemplo:

Ejemplo

int* myFunction()
{
   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:

int* myFunction()
{
   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

#include <iostream> #include <cstdlib> #include <ctime> using namespace std; // Función para generar y devolver números aleatorios int * getRandom( ) { static int r[10]; // Establecer la semilla srand( (unsigned)time( NULL ) ); for (int i = 0; i < 10; ++i) { r[i] = rand(); cout << r[i] << endl; } return r; } // Función principal para llamar a la función definida anteriormente int main () { // Un puntero a un entero int *p; p = getRandom(); for ( int i = 0; i < 10; i++ ) { cout << "*(p + " << i << ") : "; cout << *(p + i) << endl; } return 0; }

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* myFunction()
{
   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

#include <iostream>
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.

C++ 数组C++ Arrays

Otras extensiones