我該如何可靠地獲取C風格數組的大小?經常推薦的方法似乎是使用sizeof
,但它並不在foo
功能,其中x
在傳遞工作:如何可靠地獲取C風格數組的大小?
#include <iostream>
void foo(int x[]) {
std::cerr << (sizeof(x)/sizeof(int)); // 2
}
int main(){
int x[] = {1,2,3,4,5};
std::cerr << (sizeof(x)/sizeof(int)); // 5
foo(x);
return 0;
}
答案this question建議sizeof
但他們不說,它(顯然?)如果您傳遞數組,則不起作用。那麼,我必須使用哨兵嗎? (我不認爲我的foo
功能的用戶總是可以信任的把一個哨兵在最後。當然,我可以使用std::vector
,但我沒有得到漂亮的語法速記{1,2,3,4,5}
)
http://stackoverflow.com/questions/1810083/c-pointers-pointing-to-an-array-of-fixed-size – AnT 2010-03-08 20:44:56
如果你的函數的用戶不做文檔告訴他們做的事情,那是他們的問題不是你的問題。不可能防止無知的API濫用。 – 2010-03-08 20:52:15
'foo'中的'x'是一個指針,而不是一個數組。見http://stackoverflow.com/questions/232691/how-can-i-get-the-size-of-an-array-from-a-pointer-in-c,http://stackoverflow.com/questions/1975128 /的sizeof-AN-陣列內式C-編程語言。另外,dup:http://stackoverflow.com/questions/37538/c-how-do-i-determine-the-size-of-my-array – outis 2010-03-08 20:53:51