2012-07-14 92 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