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 entretiennent une relation spéciale qui est fondamentale pour comprendre comment C gère 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 pointer qui points toujours vers numbers[0]. Vous pouvez considérer le nom du tableau comme un pointer intégré que vous n'avez pas besoin de Declare séparément.
int numbers[5] = {10, 20, 30, 40, 50};
// 'numbers' points to the first element
// numbers == &numbers[0] // Ceux-ci sont équivalents !Cette équivalence est essentielle : numbers et &numbers[0] vous donnent tous les deux exactement la même adresse mémoire. Le nom du tableau est simplement un moyen plus pratique de faire référence à l'adresse du premier élément sans avoir à utiliser l'opérateur d'adresse.
Comprendre cette relation ouvre la voie à l'utilisation des techniques de pointeurs avec les tableaux, ce qui peut rendre votre code plus flexible et plus efficace. La différence clé est que, contrairement aux pointeurs ordinaires, les noms de tableaux sont des pointeurs constants - vous ne pouvez pas modifier ce vers quoi ils pointent.
Défi
FacileÉcrivez un programme 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 reçoit le nom du tableau.
Essayez vous-même
#include <stdio.h>
int main() {
// TODO: Écrivez votre code ici
// 1. Déclarez et initialisez le tableau 'numbers' avec {10, 20, 30, 40}
// 2. Déclarez un pointeur vers un entier nommé 'ptr'
// 3. Assignez le nom du tableau au pointeur
// 4. Affichez 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