2013-04-23 5 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

+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

ответ

4

Как бы мне найти размер в байтах

Это говорит вам, сколько элементы присутствуют в массиве. И он дает ожидаемый ответ 2 за dArray.

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

Если то, что вы хотите, это счетчик байт, это будет делать.

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

Может быть, потому, что массив только декларировала и не заполнен ни с чем?

Это не повлияет на поведение sizeof. Массив не имеет понятия заполнен или не заполнено.

+1

Есть ли причина для двойных скобок в первом макросе' ((array)) '? – dyp

+0

@DyP Нет функциональной причины, о которой я знаю. Это код, представленный в вопросе. :) –

+0

Довольно уверен, что OP испытывает больше проблем с получением 2 * 5 * 3 * 4, чем конвертация из elem в байты. – djechlin

2

array[0] содержит 5 * 3 * 4 элементы так sizeof(array)/sizeof(array[0]) даст вам 2, когда первый размер вашего массива 2

Перепишите макрос как:

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

, чтобы получить число элементов,

или просто sizeof(array), чтобы получить количество байтов.

Смежные вопросы