"A union may be thought of as a structure all of whose members begin at offset 0 and whose size is sufficient to contain any of its members. At most one of the members can be stored in a union at any time."
So:
union myunion {
int var_a;
int var_b;
float var_c;
} uval;
will allow (actually, force) vars var_a, var_b and var_c to share the same memory address.
uval.var_a and uval.var_b will be typed as ints, while uval.var_c will be typed as a float.
Sometimes you just gotta tell the compiler who's boss!