#include <stdio.h>
int main()
{
printf("%ld", sizeof(void *));
return 0;
}
the output for the program was 8
but I am unable to figure out how.
>Solution :
The program outputs 8
because your target is a 64-bit system with 8-bit bytes where pointers are 64-bit wide, hence occupy 8 bytes.
sizeof(void *)
is the size in bytes of a generic pointer. The value depends on the platform. I have seen different ones where it was 1
, 2
, 4
or 8
, but other values are possible, albeit highly unlikely.
Note that sizeof()
expressions evaluate to the type size_t
which is not the same as long int
(especially on Windows 64-bit platforms, where long int
only has 32 bits). You should use %zu
to print a value of this type and output a trailing newline for clarity.
#include <stdio.h>
int main(void) {
printf("%zu\n", sizeof(void *));
return 0;
}
I don’t know what the precise question was, but if asked what the output should be, here is a long answer:
- depending on the platform, the output can be
8
or4
or even2
or1
, or some other value. - if type
size_t
is not the same asunsigned long
, the behavior is undefined, anything can happen. - on some older systems, no output might appear at all because of the missing newline.
- if running the program from the C-shell, the output may be very surprising:
4%
or8%
.
The proper format is %zu
, but for maximum portability to pre-c99 systems, here is an alternative:
#include <stdio.h>
int main(void) {
printf("%d\n", (int)sizeof(void *));
return 0;
}