2013-04-23 103 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)即可獲取字節數。