Previous Next Up Index Contents

9.4. Tableaux de pointeurs


Note au lecteur

Si la notion de pointeurs vous était nouvelle jusqu'ici, alors sautez les sections 9.4 et 9.5 de ce chapitre et les exercices correspondants. Traitez d'abord le chapitre suivant jusqu'à ce que les notions de pointeurs et d'adresses se soient bien consolidées.

Si nous avons besoin d'un ensemble de pointeurs du même type, nous pouvons les réunir dans un tableau de pointeurs.

Déclaration

Déclaration d'un tableau de pointeurs

<Type> *<NomTableau>[<N>]
déclare un tableau <NomTableau> de <N> pointeurs sur des données du type <Type>.

Exemple

      double *A[10];
déclare un tableau de 10 pointeurs sur des rationnels du type double dont les adresses et les valeurs ne sont pas encore définies.

Remarque

Le plus souvent, les tableaux de pointeurs sont utilisés pour mémoriser de façon économique des chaînes de caractères de différentes longueurs. Dans la suite, nous allons surtout considérer les tableaux de pointeurs sur des chaînes de caractères.

Initialisation

Nous pouvons initialiser les pointeurs d'un tableau sur char par les adresses de chaînes de caractères constantes.

Exemple

  char *JOUR[] = {"dimanche", "lundi", "mardi", 
                  "mercredi", "jeudi", "vendredi", 
                  "samedi"};
déclare un tableau JOUR[] de 7 pointeurs sur char. Chacun des pointeurs est initialisé avec l'adresse de l'une des 7 chaînes de caractères.

On peut afficher les 7 chaînes de caractères en fournissant les adresses contenues dans le tableau JOUR à printf (ou puts) :

  int I;
  for (I=0; I<7; I++) printf("%s\n", JOUR[I]);

Comme JOUR[I] est un pointeur sur char, on peut afficher les premières lettres des jours de la semaine en utilisant l'opérateur 'contenu de' :

  int I;
  for (I=0; I<7; I++) printf("%c\n", *JOUR[I]);

L'expression JOUR[I]+J désigne la J-ième lettre de la I-ième chaîne. On peut afficher la troisième lettre de chaque jour de la semaine par:

  int I;
  for (I=0; i<7; I++) printf("%c\n",*(JOUR[I]+2));

Résumons: Les tableaux de pointeurs int *D[];
déclare un tableau de pointeurs sur des éléments du type int

D[i] peut pointer

sur des variables simples ou


sur les composantes d'un tableau.




D[i]
désigne l'adresse contenue dans l'élément i de D


(Les adresses dans D[i] sont variables)

*D[i]
désigne le contenu de l'adresse dans D[i]

Si D[i] pointe dans un tableau,

D[i]

désigne l'adresse de la première composante


D[i]+j
désigne l'adresse de la j-ième composante


*(D[i]+j)
désigne le contenu de la j-ième composante


Exercice 9.18

Considérez les déclarations de NOM1 et NOM2:

char *NOM1[] =    {"Marc",  "Jean-Marie",  "Paul",
                   "François-Xavier",    "Claude" };

char NOM2[][16] = {"Marc",  "Jean-Marie",  "Paul",
                   "François-Xavier",    "Claude" };

a) Représenter graphiquement la mémorisation des deux variables NOM1 et NOM2.

b) Imaginez que vous devez écrire un programme pour chacun des deux tableaux qui trie les chaînes selon l'ordre lexicographique. En supposant que vous utilisez le même algorithme de tri pour les deux programmes, lequel des deux programmes sera probablement le plus rapide?


Exercice 9.19

Ecrire un programme qui lit le jour, le mois et l'année d'une date au clavier et qui affiche la date en français et en allemand. Utiliser deux tableaux de pointeurs, MFRAN et MDEUT que vous initialisez avec les noms des mois dans les deux langues. La première composante de chaque tableau contiendra un message d'erreur qui sera affiché lors de l'introduction d'une donnée illégale.

Exemples:

   Introduisez la date: 1 4 1993
   Luxembourg, le 1er avril 1993
   Luxemburg, den 1. April 1993

   Introduisez la date: 2 4 1993
   Luxembourg, le 2 avril 1993
   Luxemburg, den 2. April 1993


Previous Next Up Index Contents

Feedback - Copyright © 1993,1996,1997 F.Faber