Structures allow the grouping of related data under a single name. They can contain variables of different data types. A structure is defined using the struct keyword and variables of that structure type can then be declared. Structure members are accessed using the dot operator or arrow operator with pointers. Unions share the same memory space for different data types, allowing only one data type to be stored at a time.