Retornar matriz de funções em C ++

C ++ não permite retornar uma matriz inteira como um argumento para uma função. No entanto, você pode retornar um ponteiro para uma matriz especificando o nome da matriz sem um índice.

Se você quiser retornar uma matriz de dimensão única de uma função, você terá que declarar uma função que retorna um ponteiro como no exemplo a seguir -

int * myFunction() {
   .
   .
   .
}

O segundo ponto a lembrar é que C ++ não defende retornar o endereço de uma variável local para fora da função, então você teria que definir a variável local como static variável.

Agora, considere a seguinte função, que irá gerar 10 números aleatórios e retorná-los usando uma matriz e chamar esta função da seguinte maneira -

#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;
}

Quando o código acima é compilado e executado, ele produz um resultado como o seguinte -

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