11.6. Transmission d'un tableau en paramètre d'une fonction

Icône de l'outil pédagogique Transmission d'un tableau en paramètre d'une fonction

Le passage d'un tableau comme paramètre d'une fonction est impossible en tant que valeur : la recopie du tableau prendrait trop de temps et de place. On passe donc à la fonction l'adresse du tableau, ce qui permettra à la fonction d'effectuer des lectures et des écritures DIRECTEMENT DANS LE TABLEAU.

Important : l'identificateur du tableau (son nom) représente l'adresse du début du tableau. La notation tab équivaut à &tab[0].

Pour transmettre l'adresse du tableau à une fonction, il suffit de lui donner le nom du tableau :

nom_fct( nom_tableau, ... ) ; /* appel de fonction avec argument tableau */

Exemple 59 : Passage en paramètre d'un tableau (rempli aléatoirement)

La fonction rand fournit une valeur aléatoire entre 0 et RAND_MAX. Attention : la séquence pseudo-aléatoire est toujours la même si on n’utilise pas la fonction d’initialisation pseudo-aléatoire srand (ici, au début de main) avec un argument d’appel (seed) qui conditionne le démarrage de la séquence (ici, l’horloge du PC obtenue avec time).

void srand (unsigned int Seed); int rand (void);

 

Figure 11 ‐‐2 : Un tableau en paramètre


Notez le prototype, très fréquent, d’une fonction qui doit manipuler un tableau fourni en argument :

 

void traiter_tableau( double tab[ ], short int nb_elt ) ;

 

Les fonctions n'utilisent pas la constante NB_MAX_ELT, car la taille du tableau leur est fournie en argument d’appel avec nb_elt. Faire figurer le nombre d'éléments à traiter dans la liste des paramètres n'est pas obligatoire, mais fortement conseillé pour rendre les fonctions « plus universelles ». On peut ainsi traiter des tableaux de tailles différentes avec la même fonction, ou traiter une partie du tableau seulement.

L'en‐tête de la définition et le prototype des fonctions ne précisent pas la taille du tableau : le compilateur n'a besoin que de l'adresse de début du tableau et de l'indice d'un élément pour calculer l'adresse de cet élément (vrai seulement pour les tableaux à une dimension). Cela permet d'écrire des fonctions qui peuvent manipuler des tableaux de tailles différentes, à condition de leur transmettre la taille du tableau.

Par exemple, la fonction afficher_le_tableau permet facilement d'afficher une sous‐partie d'un tableau. Il suffit de lui transmettre l'adresse du premier élément à afficher (au lieu de l'adresse du tableau, qui est par définition l'adresse du premier élément du tableau), ainsi que le nombre d'éléments à traiter. Par exemple, l'affichage des trois éléments d'indices 5, 6 et 7 d’un tableau reel se fait avec l'appel suivant :

afficher_le_tableau( &reel[5], 3 ); /* 3 éléments affichés à partir de l’élément d’indice 5*/