Data types in C include primary (fundamental) types like integers and floating-point numbers, as well as derived and user-defined types. Primary types include integers of various sizes (char, short, int, long) that can be signed or unsigned, and floating-point types like float, double, and long double. Integer types have size and value ranges that depend on the machine, such as 8-bit char from -128 to 127. Floating-point types have prescribed sizes and precision levels. User can define their own types using typedef to create new type names, or enum to define enumeration types with named values.