我该如何可靠地获取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