摘自TopCoder article:
表达式
sizeof(data)/sizeof(data[0])
返回数组data
的大小,但仅在少数情况下,因此除了此类结构外,不要在任何地方使用它。(C程序员会同意我的意见!)
要获得数组大小,我一直在使用此表达式sizeof(data)/sizeof(data[0])
所有原始类型。
是否有人知道上述表达不应的情况?
答案 0 :(得分:4)
如果data
被宣布如此:
int *data;
然后分配的空间如下:
data = malloc( NUM_ELEMENTS * sizeof(int) );
然后你的技术将无效,因为sizeof(data)
是指针的大小,而不是数组的内容。
答案 1 :(得分:4)
sizeof
方法编译但在给它指针或不确定大小的数组时不起作用。只需使用正确的C ++方法:
template <typename T, std::size_t N>
constexpr std::size_t size(T(&)[N]) {
return N;
}
在数组上使用size()
可以正常工作。如果它不适用,例如在指针上,则使用它将是一个编译时错误。
答案 2 :(得分:0)
sizeof技术工作校正静态数组,它不会有任何问题。如上所述,对于动态数组和指针数据,它将无法正常工作。