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

时间:2012-01-07 00:49:35

标签: objective-c c

我想在Objective-C

中实现类似的目标
+(int[10][10])returnArray
{
    int array[10][10];
    return array;
}

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

2 个答案:

答案 0 :(得分:8)

您无法在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;
}

答案 1 :(得分:1)

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

@interface Hills : NSObject
{


@public
    CGPoint hillVertices[kMaxHillVertices];
}

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

_hills->hillVertices 

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

相关问题