Unions in C allow storing different data types in the same memory location. A union can be defined with multiple members but at any given time only one member can contain a value. The memory occupied by a union will be the size of its largest member. Union members can be accessed using the dot operator, but assigning a value to one member may corrupt the values of others since they share the same memory location. It is best to only use one union member at a time for its intended purpose.