Retorna a matriz da função em C

A programação em C não permite retornar um array inteiro 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 <stdio.h>

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

   static int  r[10];
   int i;

   /* set the seed */
   srand( (unsigned)time( NULL ) );
  
   for ( i = 0; i < 10; ++i) {
      r[i] = rand();
      printf( "r[%d] = %d\n", i, r[i]);
   }

   return r;
}

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

   /* a pointer to an int */
   int *p;
   int i;

   p = getRandom();
	
   for ( i = 0; i < 10; i++ ) {
      printf( "*(p + %d) : %d\n", i, *(p + i));
   }

   return 0;
}

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

r[0] = 313959809
r[1] = 1759055877
r[2] = 1113101911
r[3] = 2133832223
r[4] = 2073354073
r[5] = 167288147
r[6] = 1827471542
r[7] = 834791014
r[8] = 1901409888
r[9] = 1990469526
*(p + 0) : 313959809
*(p + 1) : 1759055877
*(p + 2) : 1113101911
*(p + 3) : 2133832223
*(p + 4) : 2073354073
*(p + 5) : 167288147
*(p + 6) : 1827471542
*(p + 7) : 834791014
*(p + 8) : 1901409888
*(p + 9) : 1990469526