Puntatore di ritorno dalle funzioni in Objective-C
Come abbiamo visto nel capitolo precedente, come il linguaggio di programmazione Objective-C consente di restituire un array da una funzione, in modo simile Objective-C consente 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 array, che rappresenta un puntatore, cioè l'indirizzo del primo elemento dell'array.
#import <Foundation/Foundation.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();
NSLog(@"%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++ ) {
NSLog(@"*(p + [%d]) : %d\n", i, *(p + i) );
}
return 0;
}
Quando il codice precedente viene compilato insieme ed eseguito, produce il risultato come segue:
2013-09-13 23:32:30.934 demo[31106] 1751348405
2013-09-13 23:32:30.934 demo[31106] 1361314626
2013-09-13 23:32:30.934 demo[31106] 833264711
2013-09-13 23:32:30.934 demo[31106] 1700550876
2013-09-13 23:32:30.934 demo[31106] 1164219218
2013-09-13 23:32:30.934 demo[31106] 1083527138
2013-09-13 23:32:30.934 demo[31106] 1465344952
2013-09-13 23:32:30.934 demo[31106] 849888001
2013-09-13 23:32:30.934 demo[31106] 1220494938
2013-09-13 23:32:30.934 demo[31106] 2095604466
2013-09-13 23:32:30.934 demo[31106] *(p + [0]) : 1751348405
2013-09-13 23:32:30.934 demo[31106] *(p + [1]) : 1361314626
2013-09-13 23:32:30.934 demo[31106] *(p + [2]) : 833264711
2013-09-13 23:32:30.934 demo[31106] *(p + [3]) : 1700550876
2013-09-13 23:32:30.934 demo[31106] *(p + [4]) : 1164219218
2013-09-13 23:32:30.934 demo[31106] *(p + [5]) : 1083527138
2013-09-13 23:32:30.934 demo[31106] *(p + [6]) : 1465344952
2013-09-13 23:32:30.934 demo[31106] *(p + [7]) : 849888001
2013-09-13 23:32:30.934 demo[31106] *(p + [8]) : 1220494938
2013-09-13 23:32:30.934 demo[31106] *(p + [9]) : 2095604466