Puntero de retorno de funciones en C
Hemos visto en el último capítulo cómo la programación en C permite devolver una matriz desde una función. De manera similar, C también 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 una 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 <stdio.h>
#include <time.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("%d\n", 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:
1523198053
1187214107
1108300978
430494959
1421301276
930971084
123250484
106932140
1604461820
149169022
*(p + [0]) : 1523198053
*(p + [1]) : 1187214107
*(p + [2]) : 1108300978
*(p + [3]) : 430494959
*(p + [4]) : 1421301276
*(p + [5]) : 930971084
*(p + [6]) : 123250484
*(p + [7]) : 106932140
*(p + [8]) : 1604461820
*(p + [9]) : 149169022