Les structures sont des types de données permettant de construire un objet en regroupant plusieurs autres objets. Un exemple simple est celui des nombres complexes, représentés par le type suivant :
typedef struct {
double re;
double im;
} complexe;
On n'oubliera pas le << ; >> qui suit l'accolade fermant la définition. Le nom complexe désigne un nouveau type de données, ayant deux champs re et im de type double. On peut définir une variable de ce type par :
complexe z = {1.0, 2.0};
puis accéder aux champs de z par z.re et z.im, qui sont deux variables de type double.
Une définition incomplète d'un complexe sera simplement :
complexe z;
Les structures peuvent être passées en argument et retournées en résultat des fonctions. Comme pour tout autre type de données, le passage des arguments et du résultat se fait par valeur. On définira par exemple l'impression d'un nombre complexe par
void complexe_print(complexe z) {
printf("%f + %f i", z.re, z.im);
}
et l'addition de deux nombres complexes par
complexe complexe_add(complexe z1, complexe z2) {
complexe z = {
z1.re + z2.re,
z1.im + z2.im
};
return z;
}
Deux structures ne pouvant pas être comparées par == ou !=, il faudra le cas échéant construire ses propres fonctions de comparaison. Pour les complexes, la fonction
int complexe_eq(complexe z1, complexe z2) {
return z1.re == z2.re && z1.im == z2.im;
}
retourne 0 ou 1 selon que ses deux arguments sont différents ou égaux.