Data Type Hierarchy in C