【问题标题】:Returning a 2D C array from an Objective-C function从 Objective-C 函数返回 2D C 数组
【发布时间】:2012-01-07 00:49:34
【问题描述】:

我想在 Objective-C 中实现这样的目标

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

但是,这会产生“数组初始化程序必须是初始化程序列表”编译器错误。这有可能吗?

【问题讨论】:

    标签: objective-c c


    【解决方案1】:

    您不能在 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;
    }
    

    【讨论】:

    • 查看该代码,我似乎在许多不同的命名空间中使用了array。如果您认为它令人困惑,我会清理它。
    • 使用struct方法时,如何将struct作为二维数组访问?例如,当我执行int i = array[0][1] 时,我得到“下标值不是数组、指针或向量”
    • 您需要访问结构成员。 int i = array.array[0][1] 应该为你做。
    【解决方案2】:

    使用 Objective C++ 的另一种方法是声明数组,如下所示:

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

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

    _hills->hillVertices 
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多