Structures allow the grouping of different data types together under one name. They are useful for storing records with multiple related data fields, like a student record with a name, roll number, and marks. Structures can be initialized, passed to functions by value or reference, and used to create arrays of records. Unions share the same memory location for different member types, while structures allocate separate memory for each member.