Devolver matriz de funciones en C ++

C ++ no permite devolver una matriz completa como argumento para una función. Sin embargo, puede devolver un puntero a una matriz especificando el nombre de la matriz sin un índice.

Si desea devolver una matriz unidimensional de una función, tendría que declarar una función que devuelva un puntero como en el siguiente ejemplo:

int * myFunction() {
   .
   .
   .
}

El segundo punto a recordar es que C ++ no aboga por devolver la dirección de una variable local fuera de la función, por lo que tendría que definir la variable local como static variable.

Ahora, considere la siguiente función, que generará 10 números aleatorios y los devolverá usando una matriz y llamará a esta función de la siguiente manera:

#include <iostream>
#include <ctime>

using namespace std;

// function to generate and retrun random numbers.
int * getRandom( ) {

   static int  r[10];

   // set the seed
   srand( (unsigned)time( NULL ) );
   
   for (int i = 0; i < 10; ++i) {
      r[i] = rand();
      cout << r[i] << endl;
   }

   return r;
}

// main function to call above defined function.
int main () {

   // a pointer to an int.
   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 se ejecuta, produce el siguiente resultado:

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