Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Now that was for 0.5 marks in my previous exam for C

#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 :

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

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 or 4 or even 2 or 1, or some other value.
  • if type size_t is not the same as unsigned 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% or 8%.

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;
}
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading