我想将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但指向数组的指针。
答案 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];