1

我想将一个 long long 的数组传递给一个目标 c 函数。如果可能的话,我希望将数组作为指针传递,这样就不会进行复制。我写了这段代码:

+ (int) getIndexOfLongLongValue: (long long) value inArray: (long long []) array size: (int) count
{
    for (int i =0; i < count; i++)
    {
       if (array[i] == value)
           return i + 1;
    }
    return 0;
}

我经过

long long varname[count];

作为第二个论点。我想知道是否可以将此数组作为指针传递,或者此方法是否可以。我不需要指向 long long 的指针,而是指向数组的指针。

4

3 回答 3

2

C 数组在传递给函数或方法时总是衰减为指针,因此在您的示例中不会复制它。由于运算符适用于所有指针,指向 的指针long long自动成为指向 的数组的指针。由于您的方法不会修改数组,因此您可能需要在 API 中添加以突出显示这一事实;除此之外,你的方法很好。long long[]const

于 2012-07-14T15:09:59.807 回答
2

作为指针传递(尽管语言迂腐);没有任何东西被复制。type[]在大多数情况下,与type*.

要确认这一点,请查看sizeof(array)方法。你会看到它的大小与sizeof(void*).

如果你真的想要一个指向数组的指针,即指向 long longs 的指针,你需要使用类似type**; 但想要这样做的唯一原因是如果您想从方法中修改底层数组指针,这几乎不是这种情况。

于 2012-07-14T15:10:39.033 回答
0

Objective-C 只是常规 C 的一个非常薄的包装器,因此它的处理方式与 C 中的处理方式相同:通过引用传递。

+ (int)getIndexOfLongLongValue:(long long)value inArray:(long long *)array size:(int)count
{
    for (int i = 0; i < count; i++)
    {
        if (array[i] == value)
            return i + 1;
    }
}

然后在调用函数的代码中: int myIndex = [object getIndexOfLongLongValue: aValue inArray: varname size: count];

于 2012-07-14T15:09:37.593 回答