// compile with command
// g++ data.cpp -o data

// run with command
// data

#include <stdio.h>
#include <typeinfo>

struct my_struct
{
    int in;
    char c1;
    char c2;
    char c3;
    char c4;
    double dbl;
};

union my_union
{
    int in;
    char c1;
    char c2;
    char c3;
    char c4;
    double dbl;
    my_struct str;
};

#define PRINT(X) printf("ADDR: %p\n  CODE: %s\n  SIZE: %d\n  TYPE: %s\n", &(X), #X, sizeof(X), typeid(typeof(X)).name())

my_union A[10];
my_union un;
my_struct st;

int main()
{
    PRINT(A);
    PRINT(A[0]);
    PRINT(A[0].in);
    PRINT(A[0].c1);
    PRINT(A[0].dbl);
    PRINT(A[0].str);
    PRINT(A[0].str.in);
    PRINT(A[0].str.dbl);

    PRINT(un);
    PRINT(un.in);
    PRINT(un.c1);
    PRINT(un.dbl);

    PRINT(st.in);
    PRINT(st.c1);
    PRINT(st.dbl);
    return 0;
}
