Éléments de tableau - Pointeurs
Fait partie de la section Logic & Flow du Journey C de Coddy — leçon 8 sur 63.
Maintenant que vous comprenez comment les noms de tableaux fonctionnent comme des pointeurs, vous pouvez utiliser ces connaissances pour accéder aux éléments d'un tableau d'une manière complètement différente. Au lieu d'utiliser la notation familière entre crochets comme array[i], vous pouvez utiliser la notation par pointeur pour obtenir le même résultat.
L'idée clé est que array[i] est exactement équivalent à *(array + i). Lorsque vous écrivez array + i, vous indiquez au langage C de se déplacer de i positions vers l'avant à partir du début du tableau. L'opérateur de déréférencement * récupère ensuite la valeur à cet emplacement.
int numbers[5] = {10, 20, 30, 40, 50};
// Ces deux lignes font exactement la même chose :
printf("%d", numbers[2]); // Affiche 30
printf("%d", *(numbers + 2)); // Affiche également 30Cette notation de pointeur fonctionne car le langage C calcule automatiquement l'adresse mémoire correcte en fonction de la taille du type de données. Lorsque vous ajoutez 2 à un pointeur de tableau d'entiers, C avance de 2 × sizeof(int) octets, arrivant exactement sur le troisième élément.
Comprendre cette équivalence vous donne de la flexibilité dans votre façon de travailler avec les tableaux et vous prépare à des techniques de pointeurs plus avancées que vous rencontrerez au fur et à mesure de votre apprentissage du C.
Défi
FacileÉcrivez un programme en C qui démontre l'accès aux éléments d'un tableau en utilisant la notation par pointeur au lieu de l'indexation de tableau traditionnelle. Votre programme doit :
- Déclarer un tableau d'entiers nommé
valuesavec 6 éléments et l'initialiser avec les valeurs {5, 15, 25, 35, 45, 55} - Utiliser une boucle for pour parcourir tous les éléments du tableau
- À l'intérieur de la boucle, utiliser la notation par pointeur
*(values + i)pour accéder à chaque élément (n'utilisez pas la notation entre crochets commevalues[i]) - Afficher chaque élément en utilisant la méthode d'accès par notation de pointeur
- Après la boucle, démontrer l'équivalence en affichant le troisième élément (index 2) en utilisant les deux méthodes :
- D'abord en utilisant la notation par pointeur :
*(values + 2) - Ensuite en utilisant la notation de tableau traditionnelle :
values[2]
- D'abord en utilisant la notation par pointeur :
Votre sortie doit afficher les résultats dans le format suivant :
Element 0: 5
Element 1: 15
Element 2: 25
Element 3: 35
Element 4: 45
Element 5: 55
Third element via pointer: 25
Third element via array: 25Ce défi teste votre compréhension de l'équivalence entre array[i] et *(array + i), démontrant comment l'arithmétique des pointeurs vous permet d'accéder aux éléments d'un tableau en utilisant des calculs d'adresses mémoire au lieu de l'indexation traditionnelle.
Aide-mémoire
Les éléments d'un tableau peuvent être accédés en utilisant la notation par pointeur au lieu de la notation par crochets. L'expression array[i] est équivalente à *(array + i).
Lorsque vous écrivez array + i, C se déplace de i positions vers l'avant à partir du début du tableau. L'opérateur de déréférencement * récupère la valeur à cet emplacement.
int numbers[5] = {10, 20, 30, 40, 50};
// Ces deux lignes font exactement la même chose :
printf("%d", numbers[2]); // Affiche 30
printf("%d", *(numbers + 2)); // Affiche également 30C calcule automatiquement l'adresse mémoire correcte en fonction de la taille du type de données. Ajouter 2 à un pointeur de tableau d'entiers déplace de 2 × sizeof(int) octets vers l'avant.
Essayez vous-même
#include <stdio.h>
int main() {
// TODO: Écrivez votre code ici
// Déclarer et initialiser le tableau 'values' avec 6 éléments
// Utiliser une boucle for pour afficher chaque élément en utilisant la notation de pointeur *(values + i)
// Après la boucle, afficher le troisième élément en utilisant à la fois la notation de pointeur et de tableau
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