#include <iostream>
class AAA {
public:
struct
{
struct
{
uint32_t x;
uint32_t y;
uint32_t z;
};
uint32_t key_[3];
};
};
class BBB {
public:
union
{
struct
{
uint32_t x;
uint32_t y;
uint32_t z;
};
uint32_t key_[3];
};
};
int main() {
AAA a;
a.x = 10;
a.key_[0] = 20;
printf("a.x:%u, a.key_[0]:%u\n", a.x, a.key_[0]);
printf("sizeof(a)=%lu, &a=0x%p, a.key_:0x%p, a.key_.offset:%d\n", sizeof(a), &a, &a.key_[0], (int)((char*)&a.key_[0] - (char*)&a));
BBB b;
b.x = 10;
b.key_[0] = 20;
printf("b.x:%u, b.key_[0]:%u\n", b.x, b.key_[0]);
printf("sizeof(b)=%lu, &b=0x%p, b.key_:0x%p, b.key_.offset:%d\n", sizeof(b), &b, &b.key_[0], (int)((char*)&b.key_[0] - (char*)&b));
return 0;
}
$ g++ -g s.cpp -o ./e && ./e
a.x:10, a.key_[0]:20
sizeof(a)=24, &a=0x0x7fffd0432fa0, a.key_:0x0x7fffd0432fac, a.key_.offset:12
b.x:20, b.key_[0]:20
sizeof(b)=12, &b=0x0x7fffd0432f94, b.key_:0x0x7fffd0432f94, b.key_.offset:0