I have a piece of C code and I don't understand how the sizeof(...)
function works:
#include <stdio.h>
int main(){
const char firstname[] = "bobby";
const char* lastname = "eraserhead";
printf("%lu\n", sizeof(firstname) + sizeof(lastname));
return 0;
}
In the above code sizeof(firstname) is 6 and sizeof(lastname) is 8.
But bobby
is 5 characters wide and eraserhead
is 11 wide. I expect 16
.
Why is sizeof behaving differently for the character array and pointer to character?
Can any one clarify?
The size of your first array is the size of
bobby\0
.\0
is the terminator character, so it is 6.The second size is the size of a pointer, which is 8 byte in your 64bit system. Its size doesn't depends on the assigned string's length.
firstname
is an array of 6chars
, including the terminating'\0'
character at the end of the string. That's whysizeof firstname
is 6.lastname
is a pointer tochar
, and will have whatever size such a pointer has on your system. Typical values are 4 and 8. The size oflastname
will be the same no matter what it is pointing to (or even if it is pointing to nothing at all).sizeof
an array is the size of the total array, in the case of "bobby", it's 5 characters and one trailing\0
which equals 6.sizeof
a pointer is the size of the pointer, which is normally 4 bytes in 32-bit machine and 8 bytes in 64-bit machine.firstname[]
is null-terminated, which adds 1 to the length.sizeof(lastname)
is giving the size of the pointer instead of the actual value.firstname
is achar
array carrying a trailing0
-terminator.lastname
is a pointer. On a 64bit system pointers are 8 byte wide.