2009-10-07 110 views
27

我還沒有找到任何問題的答案。 我傳遞一個整數數組到一個函數。現在我想遍歷數組。但是,因爲事情在C,C++中通過使用arrayname.length,它給出了數組中的元素數目。有什麼方法可以找到它? [NSArrayObject長度]適用於NSArray類型,但我希望它爲int []。 甚至沒有[XYZ計數]的作品....所以想要另一種方式來找到。目標C中陣列的長度

回答

20

Objective-C沒有任何特定於int的數組。因爲如果你使用C.

sz = (sizeof foo)/(sizeof foo[0]); 
+0

我試過這個......我看到一個二維數組,但我的數組是單維...就像只是int foo []所以我做sizeof(foo)/ sizeof(foo [0])它返回4/4即1 ..我已經嘗試過......但沒有運氣..有沒有其他方式? 謝謝 – Darpan

+2

@Darpan:只有當你聲明int foo [5]而不是int foo []時,它纔有效。 – mouviciel

+0

同意w/mouviciel,這不會得到你想要的。 – pxl

5

咦?在C中,不存在「arrayname.length」之類的東西。原始類型的數組(例如int[])在運行時沒有與其關聯的任何長度信息。

17

有作爲在Objective-C下的int數組array.length沒有這樣的事情是完全相同爲C.一個int數組,如果它是靜態像int foo[5]定義,那麼你可以做sizeof(foo)得到大小 - 但只有在相同函數foo(在其他函數中,它只是一個int指針,而不是數組本身)中定義。否則,沒有固有的方式來獲取這些信息。您需要傳遞大小或使用標記值(例如C字符串中的終止'\ 0',它們只是char數組)。

+0

我要找的長度即爲編號整數數組中的元素。 而不是sizeof.as文件大小它只是返回我sizeof int – Darpan

+4

正如我所說,沒有可以做。 'sizeof()'適用於靜態大小的數組,就像我在上面給出的例子中定義的相同函數那樣。這是最接近C的來支持它的。 – Chuck

5

數組基本上是一個內存地址,一個已經分配給數組的內存塊的開頭你可能會使用相同的技術。要實際使用它,您需要在創建完成後以某種方式記住長度。您可以將長度傳遞給每個函數,也可以將數組和長度包裝到另一個結構中,並傳遞該結構。

1

看起來像NSMutableArray的工作。有什麼原因需要使用C數組?如果不是,請考慮NSMutableArray

我可能是錯的(所以請糾正我,如果我),但有沒有簡單的方法在C獲得int []在運行時的大小。你將不得不做一些事情,比如創建一個結構來保存你的數組和一個int,你可以自己跟蹤數組中的多少項。你甚至可以讓你的結構體保存你的數組和塊。那麼你可以設計塊來爲你做跟蹤。

但這更多的是一個C問題,而不是一個客觀的問題。

1

如果您想要一個整數數組,請將它們包裝在NSNumber對象中並將它們放入一個NSArray中。

你所要求做的,是不是真的可以很好地支持用C雖然有對MAC的方法,你可以嘗試(malloc_size):

determine size of dynamically allocated memory in c

2

有作爲arrayname.length沒有這樣的事情在C.這就是爲什麼如此多的函數需要參數對,數組中的一個參數和數組長度的一個參數。最明顯的例子是主要功能。你可以找到這個功能是在一個名爲main.m文件中的所有你的iPhone的項目,這將是這個樣子:

int main(int argc, char *argv[]) {  
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 
    int retVal = UIApplicationMain(argc, argv, nil, nil); 
    [pool release]; 
    return retVal; 
} 

通知的argv agument是怎樣一個v埃克特,或字符串數​​組,和argc參數是一個c數量在這個數組中的數量。

對於所有基元類型,您都必須執行相同的操作,這是Objective-C的一部分。如果你留在目標使用NSArray或子類的部分工作正常,但要求所有元素都是對象。

3

當數組中的元素總數未知時,可以使用此代碼。

main() 
{ 
    int a[]={1,2,3,4,5,6,7} 
    int i; 
    clrscr(); 
    for (i=0;i<=((sizeof(a)/sizeof(int));i++) 
    { 
     puts(a[i]); 
    } 
    getch(); 
} 
+2

一行文字前4個空格告訴網站使用代碼格式。要在多行代碼之前快速放置4個空格,請選擇所有行,然後單擊** {} **按鈕。我爲你修好了,使它可讀。 –

2

[數組數]這似乎是工作最容易在Objective-C

28

您可以用[XYZ計數]得到數組的長度

+1

問題是關於C數組,其中沒有計數選擇器。 – Vive