C structures allow grouping of related data items under one name. Structures are scalars that can be passed as function arguments or assigned to variables. Unions share the same memory region for all members, requiring the programmer to track the active member. Both structures and unions provide a way to organize related data in memory.