Comme tous les langages, C permet d'utiliser des "tableaux". On nomme ainsi un ensemble d'éléments de
même type désignés par un identificateur unique; chaque élément est repéré par un "indice" précisant sa
position au sein de l'ensemble.
Par ailleurs le langage C dispose de "pointeurs", c'est-à-dire de variables destinées à contenir des adresses
d'autres "objets" (variables, fonctions. . .).
A priori, ces deux notions de tableaux et de pointeurs peuvent paraître fort éloignées l'une de l'autre.
Toutefois, il se trouve qu'en C un lien indirect existe entre ces deux notions, à savoir qu'un identificateur
de tableau est une "constante pointeur". Cela peut se répercuter dans le traitement des tableaux,
notamment lorsque ceux-ci sont transmis en argument de l'appel d'une fonction.
C'est ce qui justifie que ces deux notions soient regroupées dans un seul chapitre.
Les tableau à un indice
Exemple d'utilisation d'un tableau en C
Supposons que nous souhaitions déterminer, à partir de vingt notes d'élèves (fournies en données),
combien d'entre elles sont supérieures à la moyenne de la classe.
S'il ne s'agissait que de calculer simplement la moyenne de ces notes, il nous suffirait d'en calculer la
somme, en les cumulant dans une variable, au fur et à mesure de leur lecture. Mais, ici, il nous faut à
nouveau pouvoir consulter les notes pour déterminer combien d'entre elles sont supérieures à la moyenne
ainsi obtenue. Il est donc nécessaire de pouvoir "mémoriser" ces vingt notes.
Pour ce faire, il paraît peu raisonnable de prévoir vingt variables scalaires différentes (méthode qui, de
toute manière, serait difficilement transposable à un nombre important de notes).
Le tableau va nous offrir une solution convenable à ce problème, comme le montre le programme suivant.
- Code:
#include <stdio.h>
int main(void)
{ int i, som, nbm ;
double moy ;
int t[20] ;
for (i=0 ; i<20 ; i++)
{ printf ("donnez la note numéro %d : ", i+1) ;
scanf ("%d", &t[i]) ;
}
for(i=0, som=0 ; i<20 ; i++) som += t[i] ;
moy = som / 20 ;
printf ("\n\n moyenne de la classe : %f\n", moy) ;
for (i=0, nbm=0 ; i<20 ; i++ )
if (t[i] > moy) nbm++ ;
printf ("%d élèves ont plus de cette moyenne", nbm) ;
return 0 ;
}
par sa ''position" dans le tableau, nommée "indice". Conventionnellement, en langage C, la première
position porte le numéro 0. Ici, donc, nos indices vont de 0 à 19. Le premier élément du tableau sera
désigné par t[0], le troisième par t[2] le dernier par t[l9].
Langage C
19
Plus généralement, une notation telle que t[i] désigne un élément dont la position dans le tableau est
fournie par la valeur de i. Elle joue le même rôle qu'une variable scalaire de type int.
Quelques régles
Les éléments de tableau
Un élément de tableau est une lvalue. Il peut donc apparaître à gauche d'un opérateur d'affectation comme
dans:
- Code:
t[2] = 5
- Code:
t[3]++ --t[i]
Les indices
Un indice peut prendre la forme de n'importe quelle expression arithmétique de type entier (ou caractère,
compte tenu des règles de conversion systématique).
La dimension d'un tableau
La dimension d'un tableau (son nombre d'éléments) ne peut être qu'une constante ou une expression
constante.
Ainsi, cette construction :
- Code:
#define N 50
....
int t[N] ; double h[2*N- 1 ];
50 (les expressions N et 2*N-1 n'étant alors plus calculables par le compilateur).
Débordement d'indice
Aucun contrôle de "débordement d'indice" n'est mis en place par la plupart des compilateurs. Pour en
comprendre les conséquences, il faut savoir que, lorsque le compilateur rencontre une lvalue telle que t[i] ,
il en détermine l'adresse en ajoutant à l'adresse de début du tableau t, un ''décalage" proportionnel à la
valeur de i (et aussi proportionnel à la taille de chaque élément du tableau). De sorte qu'il est très facile (si
l'on peut dire !) de désigner et, partant, de modifier, un emplacement situé avant ou après le tableau.
Les tableau à plusieurs indices
Leur déclaration
Comme tous les langages, C autorise les tableaux à plusieurs indices (on dit aussi à plusieurs dimensions).
Par exemple, la déclaration:
int t[5][3] réserve un tableau de 15 (5 x 3) éléments. Un élément quelconque de ce tableau se trouve alors
repéré par deux indices comme dans ces notations:
t[3][2] t[i][j] t[i-3][i +j]
Notez bien que, 1à encore, la notation désignant un élément d'un tel tableau est une lvalue.
Jeu 28 Nov - 8:07 par arsenepoutsi
» CCNA version 4 français
Dim 31 Mar - 15:15 par kadhouceeee
» Trés important " Livre exercices en langage C ( claude delannoy) "
Jeu 27 Sep - 16:31 par latifa oustouh
» Ulead VideoStudio 11.5.0157.2 Plus + Crack Collection
Jeu 26 Avr - 9:51 par miloduvi
» Langage IDL(Interface Definition Language)
Mar 27 Sep - 13:02 par Abdelkhalek Bakkari
» demande cours PHP
Jeu 2 Juin - 11:23 par elasriahmed
» exemple page web réaliser avec du html et JavaScript
Lun 30 Mai - 4:05 par ouh.rouchan.zakaria
» cours group2_ 2année 2011
Dim 20 Mar - 15:35 par El Maligno Angelo
» Cours : Infrastructures Réseaux 2003 Server
Mar 15 Fév - 6:55 par jettjackson
» cours officiel de CCNA 2
Mar 18 Jan - 13:53 par agares