1) C structures allow the grouping of related data items and treat the structure as a single scalar unit that can be passed to functions or assigned to variables.
2) Structures can contain other structures as members through pointers, allowing recursive definitions. However, one structure must be declared in incomplete form before the other refers to it.
3) Unions allow different types of data to occupy the same memory location, with the type indicated through an accompanying enum variable. The size of a union is that of its largest member.