We saw several advanced types: 1) enumerated types 2) unions 3) void * 4) function pointers All of these mechanisms allow for some sort of generic data structures. For example, enumerated types and unions were used together to create tagged unions, allowing a single struct to hold two different, but related, kinds of data. void* and function pointers are used to store and operate on data of unknown type. You should be comfortable using data structures that have been declared using either of these mechanisms.