【问题标题】:How to pass a two dimensional array of unknown size as method argument如何将未知大小的二维数组作为方法参数传递
【发布时间】:2011-08-20 01:42:41
【问题描述】:

我正在尝试传递一个二维数组,它的大小可以是动态的,作为方法参数。

在方法中我想使用具有通用数组语法的数组。

int item = array[row][column];

传递数组是不可能的,所以我想到了使用指针指针。

- (void)doSomethingWithArray:(int **)array columns:(int)nColumns rows:(int)nRows
{
   int item = array[n][m];
}

但是当我尝试将数组作为参数传递时遇到问题

int array[numberOfRows][numberOfColumns];

[someObject doSomethingWithArray:array columns:numberOfColumns rows:numberOfRows];

我找到了很多技巧和窍门,但不知何故,我想使用它的方式并没有真正起作用。

感谢您的帮助, 恩尼

【问题讨论】:

    标签: objective-c c pointers multidimensional-array


    【解决方案1】:

    objective-c 是基于 C99 的吗?

    如果是,您可以使用允许您直接传递维度信息的“新”语法。

    #include <stdio.h>
    
    void foo(int rows, int cols, int arr[rows][cols]) {
      printf("%d, %d\n", arr[0][0], arr[1][4]);
    }
    
    int main(void) {
      int arr[2][12] = {{1, 2, 3, 4, 5}, {11, 12, 13, 14, 15}};
      foo(2, 12, arr);
    }
    

    你可以看到code running on ideone

    【讨论】:

    • 是的,Objective-C 目前基于 C99。你的例子会很好。
    • 感谢您的提醒,@Jeremy
    • 好的,我必须尝试一下,但是我仍然无法将它分配给类变量,因为我仍然不知道类接口中的大小。
    【解决方案2】:
    - (void)doSomethingWithArray:(void *)array columns:(int)nColumns rows:(int)nRows {}
    ...
    [someObject doSomethingWithArray:&array columns:numberOfColumns rows:numberOfRows];
    

    【讨论】:

    • 但在这种情况下,我无法以“array[x][y]”样式访问数组。如果我编译它,我会收到错误“不兼容的指针类型”。
    猜你喜欢
    • 2015-11-29
    • 2012-04-27
    • 2015-03-18
    • 2011-06-15
    • 1970-01-01
    • 2020-10-04
    • 2020-09-21
    相关资源
    最近更新 更多