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.
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 :
- Déclarer un tableau d'entiers nommé
numbersavec 4 éléments et l'initialiser avec les valeurs {10, 20, 30, 40} - Déclarer un pointeur vers un entier nommé
ptr - Assigner le nom du tableau
numbersau pointeurptr - Afficher l'adresse stockée dans
numbersen utilisantprintfavec le spécificateur de format%p - Afficher l'adresse du premier élément
&numbers[0]en utilisantprintfavec le spécificateur de format%p - Afficher l'adresse stockée dans
ptren utilisantprintfavec le spécificateur de format%p - Afficher la valeur du premier élément en utilisant le nom du tableau :
*numbers - 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: 10Ce 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émentAccé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 pointeurDiffé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;
}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
1Les bases des pointeurs
Qu'est-ce qu'un pointeur ?Déclaration de pointeursL'opérateur d'adresse (&)L'opérateur de déréférencement (*)Pointeurs NULLRécapitulatif : Les bases des pointeurs4Projet : Utilitaire de texte simple
Présentation du projetCompter les caractères2Pointeurs et Tableaux
Noms de tableaux comme pointeursÉléments de tableau - PointeursArithmétique des pointeursComparaison de pointeursRécapitulatif : Parcours de tableau par pointeur5Pointeurs et fonctions
Passage par valeurPassage de pointeurs aux fonctionsModifier des variables via des pointeursUn exemple classique : SwapPassage de tableaux aux fonctionsRécapitulatif : Pointeurs comme arguments de fonction3Tableaux de caractères et chaînes
Les chaînes comme tableaux de charLe terminateur nulSaisie de chaînes avec scanfUtilisation de strlen()Utilisation de strcpy()Utilisation de strcat()Utilisation de strcmp()Récapitulatif : Fonctions de base sur les chaînes