2013-04-23 53 views
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; 
     } 
+0

你想在整个数组中有多少个元素的字节或大小的大小? – Boumbles 2013-04-23 17:26:13

+0

要获得数组中元素的总数(这里:2 * 5 * 3 * 4),您可以使用类似于'template constexpr std :: size_t get_element_count(T const&a){return sizeof(T)/ sizeof (typename std :: remove_all_extents :: type); }' – dyp 2013-04-23 17:41:27

回答

4

我怎么会找到的字节

大小这告诉你有多少元素存在于一个数组。它给出了的预期回答dArray

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

如果你想要的字节数,这将做到这一点。

#define ARRAY_SIZE(array) (sizeof(array)) 

也许因为数组只声明,不填充什么?

这不会影响sizeof的行为。一个数组没有填充的概念未填充

+1

在第一个宏'((array))'中有双括号的原因吗? – dyp 2013-04-23 17:26:52

+0

@DyP没有我知道的功能性原因。这是问题中提供的代码。 :) – 2013-04-23 17:27:38

+0

很确定OP比从elem转换为字节更容易获得2 * 5 * 3 * 4。 – djechlin 2013-04-23 17:33:41

2

array[0]包含5 * 3 * 4元素,因此sizeof(array)/sizeof(array[0])会给你2当你的数组的第一个维度是2

重写你的宏为:

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

获得元素的数量,

或者只需要sizeof(array)即可获取字节数。