指向Objective-C函数调用中的数组的指针

时间:2012-07-14 14:55:38

标签: objective-c c arrays

我想将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 longs但指向数组的指针。

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

作为指针(尽管语言迂腐)传入;什么都没有被复制。 type[]在很大程度上与type*相同。

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

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

答案 2 :(得分: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];