Unions allow a variable to hold objects of different types in the same memory location. All members of a union share the same memory location, which is the size of the largest member. This means unions save memory by storing all members in one block, but the programmer must ensure the correct member is being accessed based on the data currently stored. The example program defines a union called Student containing different data types, reads values into members, and displays the members to demonstrate unions share the same memory location.