On an x86_64 architecture, a pointer is 8 bytes. It makes sense to me that sizeof(x)
should return 8. I understand that a char
is a single byte, and 5 bytes is the size of array z
. What is the intuition behind why sizeof(z)
does not return 8?
int* x = new int[10];
char z[5];
// Returns 8
std::cout << "This is the size of x: " << sizeof(x) << std::endl;
// Returns 5
std::cout << "This is the size of z: " << sizeof(z) << std::endl;
z
is an array of 5 char. – Phonatesizeof
is an operator, not a function. So the array of 5 chars doesn't degrade to a pointer when passed tosizeof
. Or in other words, when an array is passed tosizeof
, the result is the absolute size of the array in bytes. – Ubiquitous