多维数组的大小查找

3

我应该如何找到像这样的数组的字节数?

    double dArray[2][5][3][4];

我尝试了这种方法,但它返回了“2”。也许是因为数组只被声明而没有填充任何内容?

     #include <iostream>
     #define ARRAY_SIZE(array) (sizeof((array))/sizeof((array[0])))
     using namespace std;

      int main() {
        double dArray[2][5][3][4];
        cout << ARRAY_SIZE(dArray) << endl;
       }

你想要以字节为单位的大小还是整个数组中有多少元素的大小? - Boumbles
要获取数组中元素的总数(此处为253*4),您可以使用类似于template<class T> constexpr std::size_t get_element_count(T const& a) { return sizeof(T)/sizeof(typename std::remove_all_extents<T>::type); }的代码。 - dyp
2个回答

5

如何找到字节大小

这告诉你数组中有多少个元素,并给出dArray的预期答案为2

#define ARRAY_SIZE(array) (sizeof((array))/sizeof((array[0])))

如果您需要计算“字节数”,这个代码可以实现。
#define ARRAY_SIZE(array) (sizeof(array))

可能是因为数组只被声明了,但没有填充任何内容?

这不会影响sizeof的行为。数组没有“填充”或“未填充”的概念。


1
第一個宏定義中的雙括號 ((array)) 有什麼特別的意義嗎? - dyp
@DyP 我没有意识到任何功能上的原因。这是问题中提供的代码。 :) - Drew Dormann
很肯定OP在计算253*4方面遇到了更多麻烦,而非将elem转换为bytes。 - djechlin
有人可能会认为,如果第一个宏的名称是ARRAY_LENGTH(或者ARRAY_EXTENT),那么它会更清晰。此外,还有C++11的方法,使用std::extent,例如template<class T> constexpr std::size_t get_extent(T const& a) { return std::extent<T>::value; } - dyp
OIC。没事了,这是正确的 - 问题在于array [0]很大,所以OP应该除以sizeof array [0] [0] [0] [0]来获取元素计数。 - djechlin

2

array[0] 包含 5 * 3 * 4 个元素,因此当数组第一维为2时,sizeof(array) / sizeof(array[0])将会返回 2

重写你的宏定义如下:

#define ARRAY_SIZE(array, type) (sizeof((array))/sizeof((type)))

要获取元素数量,可以使用sizeof(array)/sizeof(array[0]),或者简单地使用sizeof(array)来获取字节数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接