Un tableau est une variable qui représente une séquence d'emplacements mémoire contigus, chacun stockant un élément du même type. Il est idéal pour stocker et manipuler des collections de données homogènes.
Un tableau de taille n stocke n éléments du même type. Les indices vont de 0 à n-1. L'élément à l'indice i se note tab[i], équivalent en notation pointeur à *(tab + i).
Déclaration et initialisation
type nomTableau[taille]; // déclaration seule
type nomTableau[taille] {v1, v2, …}; // déclaration + initialisation
type nomTableau[] {v1, v2, v3}; // taille déduite automatiquementdouble notes[20]; // Exemple 1 : tableau de 20 doubles
int notes[6] {10.5, 9.0, 17.5, 18.75, 4.5, 8.75}; // Exemple 3
int valeurs[] {2, 3, 4}; // Exemple 5 : taille = 3 (déduite)
notes[3] = 17.5; // Exemple 2 : accès en écriture
notes[3] = notes[2]; // Exemple 4 : copie d'élémentOmettre la taille lors de l'initialisation est recommandé : le compilateur la calcule automatiquement et vous ne risquez pas de vous tromper.
Tableaux multidimensionnels
int Tab[2][2] = { {0, 1}, {2, 3} }; // Exemple 7 : tableau 2D
Tab[0][0] = 0;
Tab[0][1] = 1;
int Tab[2][2] = { 0, 1, 2, 3 }; // Exemple 8 : écriture alternativeTableaux dynamiques
Les tableaux statiques ont une taille fixée à la compilation. Pour une taille déterminée à l'exécution, on utilise new pour allouer en mémoire dynamique (tas).
int* Tab = new int[3]; // Exemple 9 : allocation dynamique
*(Tab+1) = 10; // Exemple 10 : équivalent à Tab[1] = 10Tout tableau alloué dynamiquement avec new[] doit être libéré avec delete[]. Oublier cette étape provoque une fuite mémoire.
delete[] Tab; // libérer le tableau
Tab = nullptr; // éviter un pointeur danglantTaille du tableau
Pour un tableau statique, utilisez std::size() (C++17). Pour un tableau dynamique, il faut conserver la taille dans une variable séparée.
// Exemple 12 : taille d'un tableau statique
int Tab[3] = {1, 2, 6};
int taille = std::size(Tab);
cout << "Nombre d'éléments : " << taille << '\n';Nombre d'éléments : 3
C++ ne vérifie pas les accès hors bornes. Écrire Tab[2] = 3 sur un tableau de taille 2 provoque un comportement indéfini (corruption mémoire, crash).
Pointeurs et tableaux
Un nom de tableau se comporte comme un pointeur constant vers son premier élément. On peut donc utiliser l'arithmétique des pointeurs pour parcourir le tableau.
| Notation tableau | Notation pointeur | Signification |
|---|---|---|
tab[0] | *tab | Premier élément |
tab[1] | *(tab + 1) | Deuxième élément |
tab[i] | *(tab + i) | Élément d'indice i |
Incrémenter un pointeur de 1 l'avance de sizeof(type) octets en mémoire. Ainsi, ptr + 1 pointe sur l'élément suivant, quel que soit le type du tableau.
Exemple n°19 — Saisie et affichage par notation pointeur
#include <iostream>
using namespace std;
int main() {
double notes[3];
for (int i = 0; i < std::size(notes); ++i) {
cout << "Saisir une note : ";
cin >> *(notes + i);
}
for (int i = 0; i < std::size(notes); ++i) {
cout << *(notes + i) << '\t';
}
return 0;
}
Discussion (0)
Soyez le premier à laisser un commentaire !
Laisser un commentaire
Votre commentaire sera visible après modération.