Les tableaux en C: * Intro: Un tableau est une variable qui est composé de plusieurs données de même type. Celles-ci sont rangées les unes à la suite des autres en mémoire. Elles représentent chacune une variable. Différents types que l'on peut trouver dans un tableau: - char, short, int, long, float, double - pointeur - tableau - structure Un tableau qui ne contient pas de données étant elles mêmes des tableaux est unidimensionnel. Si ce n'est pas le cas on peut trouver des tableaux imbriqués ou tableux multidimensionnels. * Tableau à une dimension: Ce type de tableau n'est donc composé que d'éléments qui ne sont pas des tableaux. La définition d'un tableau se fait comme ceci: [nombre d'éléments]; ex: int inttab[10]; /* Définit un tableau d'integer de nom inttab qui peut stocker 10 données de types int */ Donc inttab est de type "tableau de 10 éléments int" et ces éléments sont de types int. L'occupation mémoire d'un tableau est sizeof() * n. Où sizeof() est la taille en octets du type d'un élément et n le nombre d'éléments. Ici notre tableau occupe sizeof(int) * 10 octets en mémoire. Pour accéder au variable d'un tableau au doit toujours utiliser ce procédé: nom_du_tableau[numéro_élément - 1] En effet le premier élément du tableau a pour index 0. Donc dans notre exemple, pour accéder à l'élément 1 on fait: inttab[0]; Si l'on veut accéder au dernier élément du tableau (10) on fait: inttab[9]; On peut donc dire qu' "un tableau de 10 integer va donc de 0 à 9". Pour accéder à un index on peut utiliser des opérateurs ou même des variables (pratique dans une boucle). Par ex: int i = 8; inttab[5-2]; /* équivaut à inttab[3]; */ inttab[2*2]; /* équivaut à inttab[4]; */ inttab[i]; /* équivaut à inttab[8]; */ inttab[i+1]; /* équivaut à inttab[9]; */ Pour allouer une valeur à un élément du tableau on fait donc, par ex, inttab[2] = 23; L'élément 3 du tableau ou d'index 2 a donc la valeur 23. On peut bien sur avoir des expressions du type: inttab[5] = 8; inttab[2] = inttab[5] - 7; L'élément 3 du tableau ou d'index 2 a donc la valeur de l'élément 5 du tableau ou d'index 4 (8) moins 7. inttab[2] est donc égal à 1. Quelques exemples d'utilisation possibles: printf("%d", inttab[2]); /* ne pas oublier de se référer au type des éléments, ici int...on utilise donc %d. */ inttab[0] = inttab[4] = inttab[2] = inttab[7] = 5; /* initialise ces différents éléments à 0. */ Pour initialiser rapidement les valeurs du tableau on peut utiliser, à la définition, cette méthode: [nombre d'éléments] = {x1, x2, x3, ..., xn-1, xn}; Dans ce cas il n'est pas nécessaire d'indiquer le nombre d'éléments entre les crochets. Ex: int test [] = {0, 1, 2, 3, 4, 5}; /* le compilateur déduira que le tableau contient 6 éléments */ Si vous voulez attribuer les mêmes valeurs à tous les éléments du tableau vous pouvez faire, par ex. : int test [8] = {2}; /* Toutes les éléments du tableau auront pour valeur 2. */ int i; for (i = 0; i < 10; i++) printf("%d", inttab[i]); /* cela va afficher tous les éléments du tableau inttab */ * Tableau à plusieurs dimensions: Les tableaux multidimensionnels sont donc des tableux contenant des éléments qui sont eux-mêmes des tableux. Pour les définir on utilise cette forme: [x1][x2][xn]; /* entre crochet se trouvent les dimensions */ ex.: int multitab [4][4]; /* crée un tableau à deux dimensions ayant 4 * 4 = 16 éléments de type int. */ Définissons le tableau ,à deux dimensions, test contenant 4 éléments de type int: int test [2][2]; Nous avons donc ce genre de tableau: test[0][0] test[0][1] test[1][0] test[1][1] Pour accéder à un élément du tableau, on procéde avec un syntaxe du même type que précedemment: [index1][index2]...[indexn]; Pour initialiser ce genre de tableau, vous pouvez bien sûr initialiser élément par élément avec cette méthode: test [0][0] = 10; test [0][1] = 2; test [1][0] = 5; test [1][1] = 8; Cela peut vite se revéler assez lourd avec des tableaux de grande importance. Il est donc plus intéressant d'initialiser le tableau à sa définition: int test [2][2] = {10, 2, 5, 8}; Pour aller plus loin, on peut l'initialiser de façon encore plus intéressante et plus claire: int test [2][2] = { {10, 2}, {5, 8} }; /* ici on initialise d'abord la première ligne puis la seconde. */ Comme pour les tableux unidimensionnel, il est possible de ne pas spécifier la taille du tableau. La mise en place est le même. Ex.: int test [][2] = {10, 2, 5, 8}; ou même: int test [][2] = { {10, 2}, {5, 8} }; Voilà, c'est tout pour l'instant... je mettrais bientôt ce texte à jour en ajoutant la gestion des chaînes de caractères un peu plus intéressante (je le ferais savoir)... Martony. martony80@caramail.com