Objective-C 从函数返回数组
Objective-C 编程语言不允许将整个数组作为参数返回给函数。但是,您可以通过指定不带索引的数组名称来返回指向数组的指针。您将在下一章学习指针,因此可以跳过本章,直到您理解 Objective-C 中指针的概念。
如果要从函数返回一维数组,则必须声明一个返回指针的函数,如下例所示:
int * myFunction() {...}
要记住的第二点是 Objective-C 不主张将局部变量的地址返回到函数外部,因此必须将局部变量定义为 static 静态变量。
现在,考虑下面的函数,它将生成 10 个随机数,并使用数组返回它们,然后按如下方式调用此函数:
#import <Foundation/Foundation.h>@interface SampleClass:NSObject- (int *) getRandom;@end@implementation SampleClass/* 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( @"r[%d] = %d\n", i, r[i]);}return r;}@end/* main function to call above defined function */int main () {/* a pointer to an int */int *p;int i;SampleClass *sampleClass = [[SampleClass alloc]init];p = [sampleClass getRandom];for ( i = 0; i < 10; i++ ) {NSLog( @"*(p + %d) : %d\n", i, *(p + i));}return 0;}
结果如下:
2022-07-07 03:22:46.042 demo[5174] r[0] = 14841444402022-07-07 03:22:46.043 demo[5174] r[1] = 14779776502022-07-07 03:22:46.043 demo[5174] r[2] = 5823391372022-07-07 03:22:46.043 demo[5174] r[3] = 19491624772022-07-07 03:22:46.043 demo[5174] r[4] = 1821306572022-07-07 03:22:46.043 demo[5174] r[5] = 19697648392022-07-07 03:22:46.043 demo[5174] r[6] = 1052571482022-07-07 03:22:46.043 demo[5174] r[7] = 20479587262022-07-07 03:22:46.043 demo[5174] r[8] = 17281420152022-07-07 03:22:46.043 demo[5174] r[9] = 18026052572022-07-07 03:22:46.043 demo[5174] *(p + 0) : 14841444402022-07-07 03:22:46.043 demo[5174] *(p + 1) : 14779776502022-07-07 03:22:46.043 demo[5174] *(p + 2) : 5823391372022-07-07 03:22:46.043 demo[5174] *(p + 3) : 19491624772022-07-07 03:22:46.043 demo[5174] *(p + 4) : 1821306572022-07-07 03:22:46.043 demo[5174] *(p + 5) : 19697648392022-07-07 03:22:46.043 demo[5174] *(p + 6) : 1052571482022-07-07 03:22:46.043 demo[5174] *(p + 7) : 20479587262022-07-07 03:22:46.043 demo[5174] *(p + 8) : 17281420152022-07-07 03:22:46.043 demo[5174] *(p + 9) : 1802605257