ARRAY - all elements are the same type - elements don't have distinct roles. array[0] is the first, array[1] is the second, and so on. STRUCT - fields can be different types - fields have different names to reflect their roles TYPEDEF - Basic syntax: typedef «TYPE» «NAME» - Example: typedef int Number; // type is 'int' // name is 'Number' - Example: typedef struct { int x; int y; } Point; // type is 'struct { int x; int y; }' // name is 'Point' - With struct types: typedef struct { «DECLARATION»; «DECLARATION»; } «NAME»; STRUCT vs UNION - Struct stores all fields. - Union stores only one field at a time (to save space).