Menu
Coddy logo textTech

Noms de tableaux comme pointeurs

Fait partie de la section Logic & Flow du Journey C de Coddy — leçon 7 sur 63.

Les tableaux et les pointeurs en C ont une relation spéciale qui est fondamentale pour comprendre comment le C manipule les données en mémoire. Lorsque vous déclarez un tableau, le nom du tableau lui-même agit comme un pointeur constant vers le premier élément du tableau.

Cela signifie que lorsque vous avez un tableau comme int numbers[5];, le nom numbers est essentiellement un pointeur qui pointe toujours vers numbers[0]. Vous pouvez considérer le nom du tableau comme un pointeur intégré que vous n'avez pas besoin de déclarer séparément.

int numbers[5] = {10, 20, 30, 40, 50};
// 'numbers' pointe vers le premier élément
// numbers == &numbers[0]  // Ceux-ci sont équivalents !

Cette équivalence est cruciale : numbers et &numbers[0] vous donnent tous deux exactement la même adresse mémoire. Le nom du tableau est simplement un moyen plus pratique de se référer à l'adresse du premier élément sans avoir à utiliser l'opérateur d'adresse.

Comprendre cette relation ouvre la porte à l'utilisation de techniques de pointeurs avec les tableaux, ce qui peut rendre votre code plus flexible et efficace. La différence clé est que, contrairement aux pointeurs réguliers, les noms de tableaux sont des pointeurs constants - vous ne pouvez pas changer ce vers quoi ils pointent.

challenge icon

Défi

Facile

Écrivez un programme en C qui démontre l'équivalence entre les noms de tableaux et les pointeurs vers leurs premiers éléments. Votre programme doit :

  1. Déclarer un tableau d'entiers nommé numbers avec 4 éléments et l'initialiser avec les valeurs {10, 20, 30, 40}
  2. Déclarer un pointeur vers un entier nommé ptr
  3. Assigner le nom du tableau numbers au pointeur ptr
  4. Afficher l'adresse stockée dans numbers en utilisant printf avec le spécificateur de format %p
  5. Afficher l'adresse du premier élément &numbers[0] en utilisant printf avec le spécificateur de format %p
  6. Afficher l'adresse stockée dans ptr en utilisant printf avec le spécificateur de format %p
  7. Afficher la valeur du premier élément en utilisant le nom du tableau : *numbers
  8. Afficher la valeur du premier élément en utilisant le pointeur : *ptr

Votre sortie doit afficher les résultats dans le format suivant :

Array name address: [address]
First element address: [address]
Pointer address: [address]
Value via array name: 10
Value via pointer: 10

Ce défi démontre que le nom du tableau agit comme un pointeur constant vers le premier élément, et que numbers, &numbers[0], et ptr contiennent tous la même adresse mémoire lorsque ptr se voit assigner le nom du tableau.

Aide-mémoire

Les noms de tableaux en C agissent comme des pointeurs constants vers le premier élément du tableau.

Lorsque vous déclarez un tableau, le nom du tableau pointe vers le premier élément :

int numbers[5] = {10, 20, 30, 40, 50};
// 'numbers' pointe vers le premier élément
// numbers == &numbers[0]  // Ceux-ci sont équivalents !

Vous pouvez assigner un nom de tableau à un pointeur :

int *ptr;
ptr = numbers;  // ptr pointe maintenant vers le premier élément

Accédez aux valeurs en utilisant la notation de pointeur :

*numbers  // Valeur du premier élément via le nom du tableau
*ptr      // Valeur du premier élément via le pointeur

Différence clé : Les noms de tableaux sont des pointeurs constants - vous ne pouvez pas changer ce vers quoi ils pointent, contrairement aux pointeurs ordinaires.

Essayez vous-même

#include <stdio.h>

int main() {
    // TODO: Écrivez votre code ici
    // 1. Déclarer et initialiser le tableau 'numbers' avec {10, 20, 30, 40}
    // 2. Déclarer un pointeur vers un entier nommé 'ptr'
    // 3. Assigner le nom du tableau au pointeur
    // 4. Afficher toutes les adresses et valeurs requises
    
    return 0;
}
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Logic & Flow