finding size of multidimensional array
Solution 1
How would I find the size in bytes
This tells you how many elements are present in an array. And it gives the expected answer of 2
for dArray
.
#define ARRAY_SIZE(array) (sizeof((array))/sizeof((array[0])))
If what you want it the byte count, this will do it.
#define ARRAY_SIZE(array) (sizeof(array))
Maybe because the array is only declared and not filled with anything?
That won't affect the behavior of sizeof
. An array has no concept of filled or not filled.
Solution 2
array[0]
contains 5 * 3 * 4
elements so sizeof(array) / sizeof(array[0])
will give you 2
when the first dimension of your array is 2
Rewrite your macro as:
#define ARRAY_SIZE(array, type) (sizeof((array))/sizeof((type)))
to get the number of elements,
or simply sizeof(array)
to get the number of bytes.
Related videos on Youtube
kxf951
Updated on July 31, 2022Comments
-
kxf951 almost 2 years
How would I find the size in bytes of an array like this?
double dArray[2][5][3][4];
I've tried this method but it returns "2". Maybe because the array is only declared and not filled with anything?
#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; }
-
dyp about 11 yearsIs there a reason for the double brackets in the first macro
((array))
? -
Drew Dormann about 11 years@DyP No functional reason that I'm aware of. It's the code presented in the question. :)
-
djechlin about 11 yearsPretty sure OP is having more trouble getting 2*5*3*4 than converting from elem to bytes.
-
dyp about 11 yearsOne could argue the name of the first macro would be clearer if it was
ARRAY_LENGTH
(orARRAY_EXTENT
). Also, there's the C++11 approach usingstd::extent
, liketemplate<class T> constexpr std::size_t get_extent(T const& a) { return std::extent<T>::value; }
-
djechlin about 11 yearsOIC. Nevermind, this is right - problem is array[0] was giant so OP should have been dividing by sizeof array[0][0][0][0] to get elem count.