2013-04-14 269 views
-5

我已通過網絡搜索了所有方式,但找不到解決方案。查找陣列的長度

我想找到一個int數組的長度(數組中的元素數)。我想在函數中傳遞數組。

我試圖

void myFunction(int array[]) 
{ 
    int size = sizeof(array)/sizeof(array[0]); 
} 

,但沒有運氣!

下面是示例代碼:Sample Code

可以在任何一個可以幫助我在這?

+0

你寫的是什麼問題? – Nawaz

+0

該代碼有效。你有什麼問題? – delnan

+0

它總是返回1。基本上sizeof(array)和sizeof(array [0])都給出了值4 –

回答

1

當數組傳遞到函數時,它們會經歷數組到指針的轉換。這意味着T[N]類型的數組將簡單地將衰減轉換爲T*。請注意尺寸信息如何丟失。剩下的只是指向數組的第一個元素的指針。下面是從標準報價:

4.2陣列到指針轉換

左值或類型「數組NT的」或「結合的T未知的數組」的右值可以被轉換到類型「指向T的指針」的預值 。結果是一個指向數組的第一個元素的指針。

總之,sizeof(array)返回不是數組的指針的大小。這就是錯誤計算的來源。一個簡單的解決辦法是利用動態容器,如std::vector,其內部含有它的大小信息:

#include <vector> 

void myFunction(std::vector<int> const &array) 
{ 
    int size = array.size(); 
} 

如果使用std::vector不是一個選項,可以同時使用一個模板參數來推斷使用數組的引用,而不是長度:

template <unsigned N> 
void myFunction(int (&array)[N]) 
{ 
    int size = N; 
} 
+0

那麼有什麼方法可以找到長度? –

+0

@BurhanuddinSunelwala是的,看我的編輯。 – 0x499602D2

+0

實際上沒有那是一個標準的方法簽名!數組只以這種方式傳遞void myFunction(int array [])。我無法更改方法簽名! –