使用sizeof()计算数组大小

Calculation of Array size using sizeof()

本文关键字:数组 计算 sizeof 使用      更新时间:2023-10-16

摘自topcoder文章:

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

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

有人知道上述表达式不应使用的任何这种情况吗?

如果 data被声明为:

int *data;

然后像这样分配了空间:

data = malloc( NUM_ELEMENTS * sizeof(int) );

那么您的技术将无法使用,因为sizeof(data) pointer 的大小,而不是数组的内容。

sizeof方法编译,但在给指针或不确定大小的数组时不起作用。只需使用适当的C 方法:

template <typename T, std::size_t N>
constexpr std::size_t size(T(&)[N]) {
    return N;
}

在数组上使用size()正常工作。在不适用的情况下,例如在指针上。

,将是一个编译时间错误。

sizeof技术的静态数组校正,它将没有任何问题。如上所述,对于动态数组和指针数据,它将无法正常工作。