Build it:
$ make overlapRun it:
$ ./overlap
pointer: 0x1d202a0
(4-byte ints)
0: 0xCAFEBABE
1: 0xDEADBEEF
2: 0x00000000
3: 0x0000FEED
(treated as 8-byte int) 0: 0xDEADBEEFCAFEBABE
(treated as 8-byte int) 1: 0x0000FEED00000000| #include <stdio.h> | |
| #include <stdlib.h> | |
| #define COUNT 4 | |
| #define FMT_HEX_LOWER_X(f) "0x%0" f "X" | |
| #define FMT_CONV_HEX_WIDTH(x) (sizeof(x) * 2) | |
| main() { | |
| int32_t *p = malloc(sizeof *p * COUNT); | |
| *p = 0xCAFEBABE; | |
| *(p + 1) = 0xDEADBEEF; | |
| *(p + 3) = 0xFEED; | |
| printf("pointer: %p\n", p); | |
| printf("(4-byte ints)\n"); | |
| for (int i = 0; i < COUNT; i++) { | |
| printf("%d:\t" FMT_HEX_LOWER_X("*") "\n", i, FMT_CONV_HEX_WIDTH(*(p + i)), *(p + i)); | |
| } | |
| printf("(treated as 8-byte int) 0: " FMT_HEX_LOWER_X("*l") "\n", FMT_CONV_HEX_WIDTH(*(int64_t *)p), *(int64_t *)p); | |
| printf("(treated as 8-byte int) 1: " FMT_HEX_LOWER_X("*l") "\n", FMT_CONV_HEX_WIDTH(*(int64_t *)(p + 2)), *(int64_t *)(p + 2)); | |
| } |