fork download
  1. #include <stdio.h>
  2. #include <stdint.h>
  3.  
  4. static union { uint32_t x; uint16_t y[3]; } __attribute__((packed)) u;
  5. static uint64_t x;
  6.  
  7.  
  8.  
  9. int main(void)
  10. {
  11. printf("sizeof uint16_t : %zu\n", sizeof(uint16_t));
  12. printf("sizeof uint32_t : %zu\n", sizeof(uint32_t));
  13. printf("sizeof int : %zu\n", sizeof(int));
  14. printf("sizeof union u : %zu\n", sizeof(u));
  15.  
  16.  
  17. printf("&x : %p\n", (void *)&x);
  18. printf("&u : %p\n", (void *)&u);
  19. printf("Addrr difference : %zu\n", (uint8_t *)&x > (uint8_t *)&u ? (uint8_t *)&x - (uint8_t *)&u : (uint8_t *)&u - (uint8_t *)&x);
  20. return 0;
  21. }
  22.  
Success #stdin #stdout 0s 9424KB
stdin
Standard input is empty
stdout
sizeof uint16_t : 2
sizeof uint32_t : 4
sizeof int : 4
sizeof union u : 6
&x : 0x55fdb8f03038
&u : 0x55fdb8f03040
Addrr difference : 8