Devolver matriz de función en C
La programación en C no permite devolver una matriz completa como argumento a 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 <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;
}
Cuando el código anterior se compila y se ejecuta, produce el siguiente 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