Jusqu'à présent, pour manipuler des données, nous devions déclarer une variable distincte pour chaque valeur : note1, note2, note3... Cette approche atteint rapidement ses limites : comment ferions-nous s'il fallait stocker et analyser les notes de 500 étudiants ou les pixels d'une image haute définition ?
Déclarer 500 variables distinctes et écrire 500 fois l'instruction scanf() serait impensable. C'est ici qu'interviennent les tableaux.
1. Qu'est-ce qu'un tableau en C ?#
Un tableau (array) est une structure de données fondamentale qui permet de regrouper sous un nom unique une collection ordonnée d'éléments répondant à deux caractéristiques essentielles :
- Homogénéité : Tous les éléments du tableau partagent strictement le même type de données (
int,float,char, etc.). - Contiguïté en mémoire : Les éléments sont stockés côte à côte, les uns immédiatement après les autres, dans des cases mémoires consécutives de la RAM.
flowchart LR
subgraph RAM [Allocation Contiguë en RAM pour int notes[5]]
C0["Index 0\nnotes[0] = 14\nAdresse : 0x1000"] --- C1["Index 1\nnotes[1] = 18\nAdresse : 0x1004"]
C1 --- C2["Index 2\nnotes[2] = 12\nAdresse : 0x1008"]
C2 --- C3["Index 3\nnotes[3] = 16\nAdresse : 0x100C"]
C3 --- C4["Index 4\nnotes[4] = 9\nAdresse : 0x1010"]
end
Puisque chaque entier int occupe 4 octets, le compilateur accède à l'élément à l'indice \(i\) par une opération arithmétique instantanée en temps constant \(\mathcal{O}(1)\) :
2. Le principe d'indexation à base zéro (Zero-Based Indexing)#
[!IMPORTANT] En langage C, la numérotation des indices commence toujours à 0 et se termine à \(N - 1\), où \(N\) représente la taille totale du tableau.
Pour un tableau déclaré de 5 éléments :
- Le premier élément est notes[0].
- Le dernier élément est notes[4].
- Tenter d'accéder à notes[5] constitue une violation d'accès hors-limites (Out of Bounds), provoquant un comportement imprévisible ou un crash immédiat du programme.
3. Des vecteurs aux matrices multidimensionnelles#
Les tableaux ne se limitent pas à une seule dimension :
- Tableaux à 1 dimension (Vecteurs) : Une seule rangée de cases mémoires (ex: liste de notes, relevé mensuel de températures).
- Tableaux à 2 dimensions (Matrices) : Organisés en lignes et en colonnes (ex: grille de morpion, échiquier, pixels d'une image, tableau statistique croisé).
- Tableaux à \(N\) dimensions : Tenseurs ou volumes de données 3D/4D (ex: coordonnées spatiales et temporelles).
graph TD
Tableaux[Famille des Tableaux en C]
Tableaux --> 1D["Tableaux 1D (Vecteurs)\nint notes[10];"]
Tableaux --> 2D["Tableaux 2D (Matrices)\nfloat grille[3][4];"]
Tableaux --> Multi["Tableaux Multidimensionnels\nchar cube[5][5][5];"]
Sommaire de la Partie 3#
- Tableaux à une dimension : Déclaration, Parcours et Algorithmes
- Matrices et Tableaux à deux dimensions
- Algèbre matricielle en C (Addition, Transposée, Produit)
- Applications pratiques et Algorithmes de tri
Débutons sans attendre avec les tableaux à une dimension dans le chapitre suivant.
Commentaires