A union is a datastructure that can hold different data types but NOT AT THE SAME TIME. A union will contain either an instance of a type X OR an instance of a type Y. It is the programmers responsibility to make sure that on retrieval only the same type is read that was stored in the union before.
A union is therefore a polymorphic type but unlike Java or C++ the polymorphism is not taken care of by the language runtime. It is the programmers job.
union number { // number does NOT contain ALL char c; // of i,c,f and d. Only ONE at int i; // at time float f; double d; }; union number n; int j; n.i = 10; j = n.i; // n.d, n.f, n.c all would have been possible // but wrong