Puntero de retorno de funciones en C ++

Como vimos en el último capítulo, cómo C ++ permite devolver una matriz desde una función, de manera similar, C ++ le permite devolver un puntero desde una función. Para hacerlo, 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 no es buena idea 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 un nombre de matriz que representa un puntero, es decir, la dirección del primer elemento de la matriz.

#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