A union shares the same memory for all its members. If you change c, then you change i. Likewise, if you change i, then you might also change c (depending on which byte of i that you change).
Be certain to understand that the data types are different sizes. So c overlaps the same memory with i only on the first byte of i.
Also beware that on another type of computer and another compiler they might overlap on the high byte of i or a middle byte (big-endian versus little-endian, different integer size).