从Objective-C函数返回2D C数组

我想在Objective-C中实现类似的function

+(int[10][10])returnArray { int array[10][10]; return array; } 

但是,这给出了“数组初始化器必须是初始化列表”编译器错误。 这是可能吗?

您不能在C或Objective-C中返回数组(任何维度)。 由于数组不是左值,因此您无法将返回值赋给变量,因此对于这样的事情没有意义。 但是,你可以解决它。 你需要返回一个指针,或者像把数组放在一个结构中一样诡计:

 // return a pointer +(int (*)[10][10])returnArray { int (*array)[10][10] = malloc(10 * 10 * sizeof(int)); return array; } // return a structure struct array { int array[10][10]; }; +(struct array)returnArray { struct array array; return array; } 

使用目标C ++可以实现的另一种方法是按如下方式声明数组:

 @interface Hills : NSObject { @public CGPoint hillVertices[kMaxHillVertices]; } 

这意味着该数组由Hills类实例拥有 – 即它会在该类实例时消失。 然后,您可以从另一个类访问如下:

 _hills->hillVertices 

我更喜欢Carl Norum描述的技术,但是想要将其作为一种在某些情况下可能有用的选项 – 例如将数据从构建器类传递到OpenGL中。