2011-07-28 37 views
6

假設我有以下c功能:C - 數組中的元素數量?

int MyFunction(const float arr[]) 
{ 
    // define a variable to hold the number of items in 'arr' 
    int numItems = ...; 

    // do something here, then return... 

    return 1 

} 

我怎樣才能進入numItems在陣列arr中的項目數量?

+1

我記得我用來做大小另有說法爲這樣那樣的功能.. [靜態數組元素的數量的 – mihsathe

+3

可能重複和動態數組](http://stackoverflow.com/questions/2577711/number-of-elements-in-static-array-and-dynamic-array) – sth

回答

11

不幸的是,你無法得到它。在C中,以下2個是等價的聲明。

int MyFunction(const float arr[]); 
int MyFunction(const float* arr); 

您必須自己傳遞尺寸。

int MyFunction(const float* arr, int nSize); 

char指針指定字符串的字符數組的長度的情況下,通過分隔符'\0'確定。

+1

很好的答案。哪個函數定義是首選的:第一個('使用arr []')或第二個('使用* arr []')? – user3262424

+0

@ user3262424:您在評論中輸入錯誤 - 小心! :)我認爲'浮動arr []'和'浮動*'之間選擇傳遞數組是一個品味問題 –

+0

謝謝阿門。對不起,錯字。 – user3262424

1

這是不可能的,除非你有一些預定義的數組格式。因爲潛在的你可以有任何數量的浮動。並且const float arr[]只能將陣列的基地址傳遞給類型爲float []的功能,該功能無法修改。所以你可以爲narr[n]

5

要麼在另一個參數中傳遞元素的數量,要麼在數組中的分隔元素上有一些約定。

5

我最初建議這樣的:

int numItems = sizeof(arr)/sizeof(float); 

But it will not work因爲arr未在當前上下文中定義並且它被解釋爲一個簡單的指針。 所以在這種情況下,你將不得不提供元素的數量作爲參數。建議的聲明否則將在以下情況下工作:

int MyFunction() 
{ 
    float arr[10]; 
    int numItems = sizeof(arr)/sizeof(float); 
    return numItems;// returns 10 
} 
+2

arr是一個函數參數。它只是一個指針,而不是數組 - 不起作用。 http://ideone.com/sQqWP – sidyll

+2

這是不正確的。當它是一個函數參數時,'arr'不是'float []'類型。相反,它是'float *'。 –

+0

@Susam:可能這就是我說的嗎? – sidyll

2

您不能。該號碼必須分別傳送至MyFunction。所以向MyFunction添加第二個參數,它應該包含大小。

2

正如我在評論中所說的,將它作爲另一個論點傳遞似乎是唯一的解決方案。否則,你可以有一個全局定義的約定。

1

int numItems = sizeof(arr)/sizeof(float); 

更好的是

int numItems = sizeof(arr)/sizeof(*arr);