If you have an array
then sizeof(array)
returns the number of bytes the array occupies. Since each element can take more than 1 byte of space, you have to divide the result with the size of one element (sizeof(array[0])
). This gives you number of elements in the array.
Example:
std::uint32_t array[10]; auto sizeOfInt = sizeof(std::uint32_t); // 4 auto numOfBytes = sizeof(array); // 10*sizeOfInt = 40 auto sizeOfElement = sizeof(array[0]); // sizeOfInt = 4 auto numOfElements = sizeof(array) / sizeof(array[0]); // numOfBytes / sizeOfElement = 40 / 4 = 10
Note that if you pass an array to a function, the above won’t work since the array decays to a pointer and sizeof(array)
returns the size of the pointer.
std::size_t function(std::uint32_t a[]) // same for void function(std::uint32_t a[10]) { return sizeof(a); // sizeof(std::uint32_t*)! } std::uint32_t array[10]; auto sizeOfArray = function(array); // array decays to a pointer inside function()