我已通過網絡搜索了所有方式,但找不到解決方案。查找陣列的長度
我想找到一個int
數組的長度(數組中的元素數)。我想在函數中傳遞數組。
我試圖
void myFunction(int array[])
{
int size = sizeof(array)/sizeof(array[0]);
}
,但沒有運氣!
下面是示例代碼:Sample Code
可以在任何一個可以幫助我在這?
我已通過網絡搜索了所有方式,但找不到解決方案。查找陣列的長度
我想找到一個int
數組的長度(數組中的元素數)。我想在函數中傳遞數組。
我試圖
void myFunction(int array[])
{
int size = sizeof(array)/sizeof(array[0]);
}
,但沒有運氣!
下面是示例代碼:Sample Code
可以在任何一個可以幫助我在這?
當數組傳遞到函數時,它們會經歷數組到指針的轉換。這意味着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;
}
那麼有什麼方法可以找到長度? –
@BurhanuddinSunelwala是的,看我的編輯。 – 0x499602D2
實際上沒有那是一個標準的方法簽名!數組只以這種方式傳遞void myFunction(int array [])。我無法更改方法簽名! –
你寫的是什麼問題? – Nawaz
該代碼有效。你有什麼問題? – delnan
它總是返回1。基本上sizeof(array)和sizeof(array [0])都給出了值4 –