À QUOI ÇA SERT ?
Un tableau stocke plusieurs éléments du même type de manière contiguë.
Exemple :
Code: Select all
int values[4]{10, 20, 30, 40};
Code: Select all
10 | 20 | 30 | 40
1. INDEXATION
Code: Select all
values[0]
values[1]
values[2]
values[3]
Pourquoi ?
Parce que l’index représente un décalage depuis l’adresse de base.
Conceptuellement :
Code: Select all
values[i]
Code: Select all
*(values + i)
2. ADRESSE
Code: Select all
int* ptr = &values[0];
Code: Select all
int* ptr = values;
values se convertit alors en pointeur vers le premier élément.
3. ARRAY-TO-POINTER DECAY
Très important.
Code: Select all
void process(int* values)
{
}
Code: Select all
int arr[100];
process(arr);
Elle ne sait plus automatiquement qu’il y avait 100 éléments.
C’est pourquoi les API C utilisent souvent :
Code: Select all
process(buffer, size);
4. DÉPASSEMENT DE TABLEAU
Code: Select all
int arr[4]{};
arr[10] = 42;
Tu écris hors des limites.
C’est un comportement indéfini.
Cela peut :
- corrompre la pile ;
- modifier une autre variable ;
- provoquer un crash ;
- créer une vulnérabilité.
5. std::array
Code: Select all
std::array<int, 4> values{10, 20, 30, 40};
Parce que la taille fait partie du type et que tu bénéficies de l’interface STL.
Code: Select all
values.size()
values.begin()
values.end()
values.data()
6. data()
Code: Select all
int* ptr = values.data();
Exemple conceptuel :
Code: Select all
someCFunction(values.data(), values.size());
7. operator[] ET at()
Code: Select all
values[2]
Code: Select all
values.at(2)
À RETENIR
Tableau C :
- simple ;
- très bas niveau ;
- decay en pointeur ;
- taille facilement perdue.
- même idée de stockage fixe et contigu ;
- meilleure intégration au C++ moderne ;
- taille connue par le type.
