TABLEAUX C ET std::array

Salut ce forum apprends les bases du c++

Moderator: Rick

Post Reply
Hydraxx
Site Admin
Posts: 114
Joined: Mon Jan 12, 2026 4:04 pm
Location: France
Contact:

TABLEAUX C ET std::array

Post by Hydraxx »

TABLEAUX C ET std::array

À 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};
En mémoire :

Code: Select all

10 | 20 | 30 | 40
Les quatre int sont côte à côte.


1. INDEXATION

Code: Select all

values[0]
values[1]
values[2]
values[3]
Le premier index est 0.

Pourquoi ?

Parce que l’index représente un décalage depuis l’adresse de base.

Conceptuellement :

Code: Select all

values[i]
est lié à :

Code: Select all

*(values + i)

2. ADRESSE

Code: Select all

int* ptr = &values[0];
Ou :

Code: Select all

int* ptr = values;
dans de nombreux contextes.

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)
{
}
Si tu appelles :

Code: Select all

int arr[100];
process(arr);
process reçoit seulement un pointeur.

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);
Pointeur + taille.


4. DÉPASSEMENT DE TABLEAU

Code: Select all

int arr[4]{};
arr[10] = 42;
C++ ne garantit pas de vérification automatique.

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};
Pourquoi l’utiliser ?

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();
Permet de transmettre la mémoire à une API C.

Exemple conceptuel :

Code: Select all

someCFunction(values.data(), values.size());

7. operator[] ET at()

Code: Select all

values[2]
rapide mais ne vérifie pas nécessairement les bornes.

Code: Select all

values.at(2)
fait une vérification et peut lancer une exception si l’index est invalide.


À RETENIR


Tableau C :
  • simple ;
  • très bas niveau ;
  • decay en pointeur ;
  • taille facilement perdue.
std::array :
  • même idée de stockage fixe et contigu ;
  • meilleure intégration au C++ moderne ;
  • taille connue par le type.

Return to “Bases du C++”

Who is online

Users browsing this forum: No registered users and 1 guest