A programming language is proposed to help programmer to process certain  kinds of data and to provide useful output. The task of data processing  is accomplished by executing series of commands called program. A  program usually contains different types of data types (integer, float,  character etc.) and need to store the values being used in the program. C  language is rich of data types. A C programmer has to employ proper  data type as per his requirement.
C has different data types for different types of data and can be broadly classified as :
- Primary      data types
- Secondary      data types
Primary data types consist following data types.Data Types in C
 
  
Integer types:
Integers are whole numbers with a range of  values, range of values are machine dependent. Generally an integer  occupies 2 bytes memory space and its value range limited to -32768 to  +32767 (that is, -2
15 to +2
15-1). A signed integer use one bit for storing sign and rest 15 bits for number. 
To control the range of numbers and storage space, C has three classes  of integer storage namely short int, int and long int. All three data  types have signed and unsigned forms. A short int requires half the  amount of storage than normal integer. Unlike signed integer, unsigned  integers are always positive and use all the bits for the magnitude of  the number. Therefore the range of an unsigned integer will be from 0 to  65535. The long integers are used to declare a longer range of values  and it occupies 4 bytes of storage space.
Syntax: int <variable name>; like
int num1;
short int num2;
long int num3;
Example: 5, 6, 100, 2500.
Integer Data Type Memory Allocation
 
  
Floating Point Types:
The float data type is used to store  fractional numbers (real numbers) with 6 digits of precision. Floating  point numbers are denoted by the keyword float. When the accuracy of the  floating point number is insufficient, we can use the double to define  the number. The double is same as float but with longer precision and  takes double space (8 bytes) than float. To extend the precision further  we can use long double which occupies 10 bytes of memory space. 
Syntax:          float <variable name>; like
float num1;
double num2;
long double num3;
Example:      9.125, 3.1254.
Floating Point Data Type Memory Allocation
 
  
Character Type:
Character type variable can hold a single  character. As there are singed and unsigned int (either short or long),  in the same way there are signed and unsigned chars; both occupy 1 byte  each, but having different ranges. Unsigned characters have values  between 0 and 255, signed characters have values from –128 to 127.
Syntax: char <variable name>; like
char ch = ‘a’;
Example:      a, b, g, S, j.
Void Type:
The void type has no values therefore we cannot declare it as variable as we did in case of integer and float. 
The void data type is usually used with function to specify its type.  Like in our first C program we declared “main()” as void type because it  does not return any value. The concept of returning values will be  discussed in detail in the C function hub.
Secondary Data Types
- Array in C      programming
 An array in C language is a collection of similar data-type, means an       array can hold value of a particular data type for which it has been       declared. Arrays can be created from any of the C data-types  int,...
- Pointers      in C Programming
 In this tutorial I am going to discuss what pointer is and how to use  them      in our C program. Many C programming learner thinks that  pointer is one of      the difficult topic in C language but its not...
- Structure      in C Programming
 We used variable in our C program to store value but one variable can       store only single piece information (an integer can hold only one  integer      value) and to store similar type of values we had to  declare...
User defined type declaration 
C language supports a  feature where user can define an identifier that characterizes an  existing data type. This user defined data type identifier can later be  used to declare variables. In short its purpose is to redefine the name  of an existing data type.
Syntax: typedef <type> <identifier>; like
typedef int number;
Now we can use number in lieu of int to declare integer variable. For  example: “int x1” or “number x1” both statements declaring an integer  variable. We have just changed the default keyword “int” to declare  integer variable to “number”.
Data Types in C, Size & Range of Data Types.