Unions in C allow storing different data types in the same memory location. Only one member can contain a value at a time. Unions are defined using the union statement, which creates a new data type with multiple members. No memory is allocated until a union variable is created. Members are accessed using the . operator, and the size of the union is the size of its largest member. Union members can also be accessed through pointers using the -> operator. Unions provide efficient use of memory compared to structures, which allocate separate memory for each member.