A typedef lets us define a synonym for a type:
typedef double wages; // wages is a synonym for double typedef int exam_score; // exam_score is a synonym for int typedef wages salary; // indirect synonym for double
A typedef name can be used as a type specifier:
wages hourly, weekly; // double hourly, weekly; exam_score test_result; // int test_result;
A typedef definition begins with the keyword typedef, followed by the data type and identifier. The identifier, or typedef name, does not introduce a new type but rather a synonym for the existing data type. A typedef name can appear anywhere in a program that a type name can appear.
Typedefs are commonly used for one of three purposes:
To hide the implementation of a given type and emphasize instead the purpose for which the type is used
To streamline complex type definitions, making them easier to understand
To allow a single type to be used for more than one purpose while making the purpose clear each time the type is used