Début de la boite de navigation du chapitre
Tableaux
Icône de la faculté
Chapitre no 12
Leçon : Langage C
Chap. préc. :Pointeurs
Chap. suiv. :Structures
fin de la boite de navigation du chapitre
En raison de limitations techniques, la typographie souhaitable du titre, « Langage C : Tableaux
Langage C/Tableaux
 », n'a pu être restituée correctement ci-dessus.

Introduction

modifier

Un tableau peut être représenté par une suite de variables qui sont, dans la mémoire, collés les uns aux autres. Cependant, les données qui constitue un tableau doivent être de même type. On parlera ainsi d'un tableau d'entier, un tableau de caractère, etc, mais aucun mix entre eux dans un même tableau.

Illustration

modifier
int tab[N];

On déclare ainsi un tableau de N entiers en mémoire. Les indices vont de 0 à N-1.

char chaine[N];

On déclare ainsi un tableau de N caractères en mémoires. Les indices vont de 0 à N-1. Il est bon de savoir qu'une chaîne de caractères n'est rien d’autre qu'un tableau de caractères contenant N+1 cases avec :

- N le nombre total de caractères qui compose la chaîne, espaces et caractères spéciaux compris ;

- le dernier caractère étant le caractère de fin de chaîne à savoir '\0'.

Attention, dans les exemples précédents, N doit obligatoirement être connu en amont par le compilateur, soit par un nombre en clair, soit par un #define. Les écritures suivantes sont correctes :

int tab[10];

#define N 10
...
int tab[N];

En revanche, les écritures suivantes ne sont pas autorisées et le compilateur vous indiquera une erreur :

int tab[a];
int a;
...
a = 10;

int tab[];

Initialisation d'un tableau

modifier

Il y a plusieurs possibilités pour initialiser un tableau.

Initialisation lors de la déclaration

modifier

Il est tout à fait possible d'initialiser un tableau lors de sa déclaration. Prenons le cas d'un tableau de caractères, rien ne vous interdit d'écrire :

char chaine[12] = {'W', 'i', 'k', 'i', 'v', 'e', 'r', 's', 'i', 't', 'y', '\0'};

et si compter le nombre de caractères vous embêtent, vous pouvez opter pour la syntaxe suivante :

char chaine[] = "Wikiversity";

et si vous êtes à l'aise avec les pointeurs :

char *chaine= "Wikiversity";

Les plus attentifs remarqueront que dans la première écriture nous avons ajouter le caractère '\0', également appelé caractère de fin de chaîne (également appelé fin de tableau). Il faut savoir que tout tableau, quel qu’il soit, contient et doit contenir un caractère de fin de chaîne. Il est soit explicitement inséré par l'utilisateur comme dans le cas n°1, ou alors de façon automatique (cas n°2). Ainsi, nous comprendrons que nos deux cas proposent un tableau chaine de 12 cases allant de 0 à 11 où chaine[11] sera le caractère fin de chaîne '\0'.

Initialisation directement depuis le code

modifier

Si nous sommes autorisé à écrire, à l'initialisation le code suivant :

char chaine[] = "Wikiversity";

Il nous est, en revanche, strictement interdit d’utiliser cette méthode en dehors de l'initialisation. Ainsi le code suivant ne compilera pas :

char chaine[12];
...
chaine= "Wikiversity";

Il faudra obligatoirement inscrire, un à un les caractère dans la chaîne. Il est possible de le faire ligne par ligne, ou via une boucle.

char chaine[12];
...
chaine[0] = 'W';
chaine[1] = 'i';
chaine[2] = 'k';
...
chaine[10] = 'y';
chaine[11] = '\0';

char chaine[5];
int i;
...
for (i = 0; i < 4; i++)
{
  chaine[i] = 'a';
}
chaine[4] = '\0';