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;
What is the intuition behind why
sizeof(z)
does not return 8?
z
is not a pointer. Hence sizeof(z)
is not anything, but 5 bytes. In case of sizeof
, the array doesn't decay to pointer. Refer: What is array decaying?
There are several implicit conversions in C++ like array to pointer, enum to integer, double
to float
, derived to base, any pointer to void*
and so on. Which may lead us to think if their sizes are same or what?
Hence, a litmus test for self understanding is to create a pointer reference & try to assign the other type. It results in error for non matching types. e.g.
int *x = new int[5], *&px = x; // OK
int z[5], *&pz = z; // error: can't initialize