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