使用sizeof()计算数组大小

时间:2016-12-29 19:13:45

标签: c++ arrays sizeof

摘自TopCoder article

  

表达式sizeof(data)/sizeof(data[0])返回数组data的大小,但仅在少数情况下,因此除了此类结构外,不要在任何地方使用它。(C程序员会同意我的意见!)

要获得数组大小,我一直在使用此表达式sizeof(data)/sizeof(data[0]) 所有原始类型

是否有人知道上述表达不应的情况?

3 个答案:

答案 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技术工作校正静态数组,它不会有任何问题。如上所述,对于动态数组和指针数据,它将无法正常工作。