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 :
struct complexe { double re; double im; };
On n'oubliera pas le << ; >> qui suit l'accolade fermant la définition. L'expression struct 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 :
struct 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 struct complexe sera simplement :
struct complexe z;
Le mécanisme d'abréviation de type permet de remplacer struct complexe par complexe après avoir écrit :
typedef struct complexe complexe;
Il suffira par la suite de déclarer 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 printf_complexe(complexe z) { printf("%f + %f i", z.re, z.im); }
et l'addition de deux nombre complexes par
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 :
int eq_complexe(complexe z1, complexe z2) { return z1.re == z2.re && z1.im == z2.im; }