2012-07-14 95 views
1

阵列我想的长长的数组传递到目标c函数。如果可能的话,我希望数组作为指针传递,以便复制不会完成。我写了这个代码:指针在Objective-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的指针,但指向数组。

回答

2

传递在作为指针(语言迂腐尽管);没有东西被抄袭。 type[]在很大程度上与type*相同。

为了证实这一点,在方法退房sizeof(array)。您会看到它的大小与sizeof(void*)相同。

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

+0

谢谢,但我还是不完全明白。比方说,我有一个1000个项目的数组(作为例子),我把它传递给这个函数。使用的内存是否只增加一个指针的大小 - 4-8个字节? – user1122069 2012-07-14 16:36:15

+0

(long long *)数组与long long [])数组是一样的吗? – user1122069 2012-07-14 16:40:19

+0

数组生活在堆上(通常)。当你调用该函数时,你传入的所有内容都是一个指针---数组的位置。 (在C/C++/Objective C中通过数值传递数组实际上很难;你不会偶然这样做)。long long *'和long long []'当用作参数类型时,代表指针。 – 2012-07-14 19:14:51

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];

2

C数组总是衰变时传递给一个函数或方法,因此它未在例如复制指针。一个指针,指向long long自动是指向的long long阵列,借助于操作者[]是适用于所有的指针。由于您的方法不会修改数组,因此您可能需要添加const以在您的API中突出显示此事实;除此之外,你的方法很好。

+0

你能上什么“腐朽”的意思在这里展开。从什么衰减?什么是数组定义什么是指针不? – 2012-07-14 16:14:53

+0

我认为他在这里意味着这个类型变成了一个指针,而之前是一个被称为数组的指针。 – user1122069 2012-07-14 16:38:06

+0

@MichelMüller请参阅[此问题](http://stackoverflow.com/q/1461432/335858)以获取解释。 – dasblinkenlight 2012-07-14 18:19:06