compiler allocate only one memory location 4223088
first member of union will store at memory location 4223088
second member of union will store at memory location 4223088
third member of union will store at memory location 4223088

Each member share the same memory in union while compiler allocate memory for every structure member

What part confuses you? This looks like what one would expect. Do you know that an int takes 4 bytes╣ of memory? So the union only takes 4 bytes even though it contains 3 ints. If it was a regular struct, it would take 12 bytes!

If you want to print the address of a variable it is better tu use '%p' instead of 'd'
All three variables of int have the same size, so they starts at the same place in memory.
If you would change your code like this: