【问题标题】:Returning a 2D C array of type id in Objective-C在 Objective-C 中返回一个 id 类型的二维 C 数组
【发布时间】:2012-02-17 14:23:43
【问题描述】:

我在我的 iOS 应用程序中使用了一个 2D C 的 ID 数组。是否可以在 Objective-C 方法中返回它?作为替代解决方案,我尝试返回指向 2D C 整数数组的指针,但我无法修改 2D-int 数组。

- (int (*)[8][8])board:(Piece *)piece
{

    int (*layout)[8][8] = malloc(8 * 8 * sizeof(int));

    //Cannot modify layout 2D C array

    return layout;
}

我在 Objective-C 方面有一些经验,但在 C 方面没有经验。我是否可能在使用 C 2D 数组时不断遇到问题,以至于我应该创建一个 2D-Array Objective-C 类? iOS 开发人员会使用的更典型的方法是什么?

【问题讨论】:

  • 我总是想知道人们如何在没有一些 C 经验的情况下使用 Obj-C 进行编程 :) 尝试一些 C 教程。它将帮助你理解 Obj-C。

标签: objective-c c ios


【解决方案1】:
- (int **)board:(Piece *)piece
{

    int **layout = malloc(8 * sizeof(int *));
    for(int i=0; i<8; i++)
       layout[i] = malloc(8 * sizeof(int));


    return layout;
}

最后别忘了释放内存。此外,您还可以使用一维数组和类似的东西以类似的方式访问它:

#define access(array, x, y) array[y * 8 + x]

现在在 Objective-C 中也减少了多维数组类,但你可以创建一个 NSArray 和其他 NSArray,或者,如果其他人这样做了,谷歌(我记得在至少有一个实现,但记不起它的名字了)

【讨论】:

    【解决方案2】:

    声明int (*layout)[8][8] = malloc(8 * 8 * sizeof(int)); 后,您可以更改(*layout)[x][y]=val; 等值。但是我建议你声明int (*layout)[8],这样你就可以通过简单的layout[x][y]=val来访问元素。

    编辑:我不了解 Objective-C,但在 C 中,我建议的函数如下所示:

    int (*newarray())[8] {
     int (*l)[8]=malloc(64*sizeof(int));
     // You can do stuff like l[2][4]=15 here
     return l;
    }
    

    【讨论】:

      猜你喜欢
      • 2018-01-17
      • 1970-01-01
      • 2015-09-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-30
      • 2021-12-24
      • 2014-12-22
      • 1970-01-01
      相关资源
      最近更新 更多