Tous les langages de programmation ont une notion de type, mais ce n'est pas toujours la même. Pascal, C, C++, Java et Fortran ont la même notion de type.
De façon informelle, les types (de données) permettent de classifier les objets manipulés par les programmes : caractères, entiers, flottants, tableaux, etc. Cette classification a au moins un intérêt, qui est de pouvoir interpréter et utiliser correctement ces objets, alors qu'ils sont représentés en mémoire, de façon uniforme, par des suites de 0 et de 1.
La même suite de 0 et de 1 peut être interprétée différemment selon qu'il s'agit d'un entier ou d'un flottant. De plus, ce ne sont pas les mêmes opérations qui seront exécutées sur des entiers ou sur des flottants : ce sont des << unités fonctionnelles >> différentes du microprocesseur qui exécuteront une addition sur des entiers et une addition sur des flottants. Cette notion de type est commune à tous les langages.
Des langages comme Pascal ou C sont dits fortement typés . Tout nom de variable doit être déclaré avec son type, tout nom de fonction doit être déclaré avec le type de ses arguments et le type de son résultat. Cela permet d'une part de déterminer la quantité de mémoire nécessaire pour représenter un objet (par exemple, un entier est représenté sur 4 octets, un flottant en double précision sur 8 octets). D'autre part, ces déclarations permettent de vérifier que les expressions sont correctement typées, et que par exemple, on n'appelle pas une fonction avec un argument numérique alors qu'elle a été déclarée avec un paramètre de type tableau.
C offre une grande variété de types. Il y a des types simples : citons le type vide void, le type char des caractères, le type int des entiers, les types float et double des nombres flottants en simple et double précision. Il y a ensuite des constructeurs de types, qui permettent de définir des types à partir d'autres types : citons le constructeur << tableau >>, le constructeur << pointeur >>, et le constructeur << structure >>. On verra par exemple comment définir un type << tableau de pointeurs de structures à deux champs, int et tableau de char >>.