Puntatore di ritorno da funzioni in C ++
Come abbiamo visto nel capitolo scorso, come C ++ permette di restituire un array da una funzione, in modo simile C ++ permette di restituire un puntatore da una funzione. Per fare ciò, dovresti dichiarare una funzione che restituisce un puntatore come nell'esempio seguente:
int * myFunction() {
.
.
.
}
Il secondo punto da ricordare è che non è una buona idea restituire l'indirizzo di una variabile locale all'esterno della funzione, quindi dovresti definire la variabile locale come static variabile.
Consideriamo ora la seguente funzione, che genererà 10 numeri casuali e li restituirà utilizzando un nome di matrice che rappresenta un puntatore, ovvero l'indirizzo del primo elemento di matrice.
#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 il codice sopra viene compilato insieme ed eseguito, produce un risultato come segue:
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