next up previous contents index
Next: Tableaux contre structures Up: No Title Previous: Argument tableau pluridimensionnel d'une

Structures

       

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 complexesgif, 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;
}

 



Rene Lalement
Mon Sep 30 18:22:54 MET 1996