paul@428 | 1 | #include <stdio.h> |
paul@428 | 2 | #include <stdint.h> |
paul@428 | 3 | |
paul@428 | 4 | struct A |
paul@428 | 5 | { |
paul@428 | 6 | uint32_t a; |
paul@428 | 7 | uint64_t b; |
paul@428 | 8 | uint64_t c; |
paul@428 | 9 | } __attribute__ ((packed)); |
paul@428 | 10 | |
paul@428 | 11 | struct B |
paul@428 | 12 | { |
paul@428 | 13 | uint32_t a; |
paul@428 | 14 | uint64_t b; |
paul@428 | 15 | uint64_t c; |
paul@428 | 16 | }; |
paul@428 | 17 | |
paul@428 | 18 | struct C |
paul@428 | 19 | { |
paul@428 | 20 | uint32_t a; |
paul@428 | 21 | uint32_t b; |
paul@428 | 22 | uint64_t c; |
paul@428 | 23 | }; |
paul@428 | 24 | |
paul@428 | 25 | int main(int argc, char *argv[]) |
paul@428 | 26 | { |
paul@428 | 27 | struct A a = {1, 2, 3}; |
paul@428 | 28 | struct B b = {1, 2, 3}; |
paul@428 | 29 | struct C c = {1, 2, 3}; |
paul@428 | 30 | uint32_t m[6] = {1, 2, 3, 4, 5, 6}; |
paul@428 | 31 | struct A *ma = (struct A *) m; |
paul@428 | 32 | struct A *ma1 = (struct A *) (m + 1); |
paul@428 | 33 | |
paul@428 | 34 | printf("a.a @ %p = %x\n", &a.a, a.a); |
paul@428 | 35 | printf("a.b @ %p = %llx\n", &a.b, a.b); |
paul@428 | 36 | printf("a.c @ %p = %llx\n\n", &a.c, a.c); |
paul@428 | 37 | printf("b.a @ %p = %x\n", &b.a, b.a); |
paul@428 | 38 | printf("b.b @ %p = %llx\n", &b.b, b.b); |
paul@428 | 39 | printf("b.c @ %p = %llx\n\n", &b.c, b.c); |
paul@428 | 40 | printf("c.a @ %p = %x\n", &c.a, c.a); |
paul@428 | 41 | printf("c.b @ %p = %x\n", &c.b, c.b); |
paul@428 | 42 | printf("c.c @ %p = %llx\n\n", &c.c, c.c); |
paul@428 | 43 | printf("ma.a @ %p = %x\n", &ma->a, ma->a); |
paul@428 | 44 | printf("ma.b @ %p = %llx\n", &ma->b, ma->b); |
paul@428 | 45 | printf("ma.c @ %p = %llx\n\n", &ma->c, ma->c); |
paul@428 | 46 | printf("ma1.a @ %p = %x\n", &ma1->a, ma1->a); |
paul@428 | 47 | printf("ma1.b @ %p = %llx\n", &ma1->b, ma1->b); |
paul@428 | 48 | printf("ma1.c @ %p = %llx\n\n", &ma1->c, ma1->c); |
paul@428 | 49 | |
paul@428 | 50 | return 0; |
paul@428 | 51 | } |