Blog Alphorm Logo de blog informatique spécialisé en technologie et solutions IT
  • Développement
  • 3D et Animation
  • Cybersécurité
  • Infrastructure
  • Virtualisation
  • Réseaux
  • Bureautique
  • BDD
En cours de lecture : Pointeurs et Tableaux en C : Comprendre leur Relation
Agrandisseur de policeAa
Blog AlphormBlog Alphorm
  • Développement
  • 3D et Animation
  • Cybersécurité
  • Infrastructure
  • Virtualisation
  • Réseaux
  • Bureautique
  • BDD
Search
  • Développement
  • 3D et Animation
  • Cybersécurité
  • Infrastructure
  • Virtualisation
  • Réseaux
  • Bureautique
  • BDD
Suivez-nous
© Alphorm 2024 - Tous droits réservés
Développement

Pointeurs et Tableaux en C : Comprendre leur Relation

L'Équipe Alphorm Par L'Équipe Alphorm 18 janvier 2025
Partager
Partager

Comprendre la relation complexe entre les pointeurs et les tableaux en C peut être déroutant pour les développeurs.

Une mauvaise compréhension peut entraîner des erreurs de gestion de mémoire, rendant le code inefficace et difficile à maintenir.

Cet article décompose la relation entre pointeurs et tableaux, offrant des explications claires et des exemples pratiques pour les maîtriser.

Table de matière
Pointeurs et tableaux en C : le lienRelation de base : tableaux en CDifférences : tableaux vs pointeurs CFonctions en C : pointeurs et tableauxArithmétique : tableaux multidimensionnels CConclusion sur pointeurs et tableaux CFAQConclusion

Formation Le langage C : Acquérir les fondamentaux

Développez votre expertise en C et ouvrez la voie à des projets passionnants.

Découvrir cette formation

Pointeurs et tableaux en C : le lien

Question : Quelle est la relation entre un tableau et un pointeur en langage C, et comment le tableau peut-il être manipulé comme un pointeur dans la mémoire ?

Un tableau et un pointeur en C sont étroitement liés dans la façon dont ils accèdent à la mémoire. Le nom d’un tableau est essentiellement un pointeur constant qui représente l’adresse du premier élément du tableau. Cela signifie que, dans de nombreux cas, un tableau peut être manipulé comme un pointeur.

Relation de base : tableaux en C

Quand vous déclarez un tableau comme :

				
					
int tableau[5] = {10, 20, 30, 40, 50};

				
			

Le nom tableau est traité par le compilateur comme l’adresse du premier élément du tableau, c’est-à-dire &tableau[0].

Ainsi, l’instruction suivante :

				
					
int *p = tableau;

				
			

est équivalente à :

				
					
int *p = &tableau[0];

				
			

Cela signifie que le pointeur p pointe vers l’adresse du premier élément du tableau , tout comme le fait tableau lui-même. Il n’y a donc pas de différence fondamentale entre l’utilisation d’un tableau et d’un pointeur dans ce contexte, sauf que le nom du tableau est un pointeur constant (il ne peut pas être modifié pour pointer ailleurs), tandis qu’un pointeur ordinaire peut être redirigé vers d’autres adresses.

Accès aux éléments avec un pointeur

L’arithmétique des pointeurs peut être utilisée pour accéder aux éléments d’un tableau. Par exemple :

				
					
*(tableau + 2)   // équivalent à tableau[2]

				
			
Opération
Signification
tableau[i]
Accède à l’élément d’indice i
*(tableau + i)
Accède à l’adresse décalée de i

Example :

				
					
#include <stdio.h>
int main() {
  int tableau[5] = {10, 20, 30, 40, 50};
  int *p = tableau;
  printf("tableau[2] : %d\n", tableau[2]);
  printf("tableau[2] : %d\n", *(p + 2));
        // Affiche également 30
      return 0;
}

				
			

Dans ces deux cas, nous accédons à la troisième position du tableau (index 2). L’expression *(p + 2) est le résultat de la somme de l’adresse pointée par p (qui est celle du premier élément du tableau) et le déplacement de deux positions en mémoire (dû au type int, chaque position représente 4 octets sur une architecture 32 bits).

  • Example d’exaction du code sur Eclipse
Code C utilisant pointeurs et tableaux.

Arithmétique des pointeurs

L’arithmétique des pointeurs permet de parcourir un tableau à l’aide d’un pointeur. En augmentant ou en diminuant la valeur du pointeur, vous vous déplacez dans le tableau.

Voici un exemple d’arithmétique des pointeurs :

				
					
#include <stdio.h>
int main() {
  int tableau[5] = {10, 20, 30, 40, 50};
  int *p = tableau;
  for (int i = 0; i < 5; i++) {
    printf("Élément %d : %d\n", i, *(p + i));
      // Utilisation de l'arithmétique des pointeurs
  }
  return 0;
}

				
			

déplacent le pointeur de 1 ou 2 positions, respectivement, dans le tableau. Notez que le déplacement dépend du type des éléments du tableau. Si vous avez un tableau de float ou de char, l’incrémentation du pointeur se fera par les tailles des types respectifs (4 octets pour un float, 1 octet pour un char).

  • Example d’exaction du code sur Eclipse
Code C utilisant pointeurs pour accéder tableau

Différences : tableaux vs pointeurs C

Aspect
Tableau
Pointeur
Allocation mémoire
Un tableau est une zone contiguë de mémoire allouée à la compilation (variable locale ou globale).
Un pointeur peut être redirigé vers différentes zones de mémoire au cours du programme (via l’allocation dynamique par exemple).
Modifiabilité
Le nom d’un tableau est constant et ne peut pas être modifié pour pointer ailleurs.
Un pointeur peut être redirigé vers différentes adresses.
Taille
L’opérateur sizeof appliqué à un tableau renvoie la taille totale du tableau. (Ex: sizeof(tableau) retourne 20 octets pour un tableau d’entiers de 5 éléments sur une machine 32 bits).
L’opérateur sizeof appliqué à un pointeur renvoie la taille de l’adresse qu’il contient (4 ou 8 octets selon l’architecture).

Exemple du code :

				
					
#include <stdio.h>
int main() {
  int tableau[5] = {10, 20, 30, 40, 50};
  int *p = tableau;
  printf("Taille du tableau : %lu\n", sizeof(tableau));
    // Affiche 20
      printf("Taille du pointeur : %lu\n", sizeof(p));
        // Affiche 4 ou 8
      return 0;
}

				
			
  • Example d’exaction du code sur Eclipse
Code C comparant taille tableau et pointeur

Fonctions en C : pointeurs et tableaux

Lorsque vous passez un tableau à une fonction en C, ce n’est en réalité qu’un pointeur vers le premier élément qui est passé. Cela signifie que les fonctions peuvent modifier les éléments du tableau en modifiant les valeurs via ce pointeur.

Exemple :

				
					
#include <stdio.h>
void modifierTableau(int *p) { p[0] = 100; }
int main() {
  int tableau[5] = {10, 20, 30, 40, 50};
  modifierTableau(tableau);
  printf("%d\n", tableau[0]);
    // Affiche 100
      return 0;
}

				
			

Ici, la fonction modifierTableau reçoit un pointeur sur le tableau et peut modifier directement son contenu.

  • Example d’exaction du code sur Eclipse
Code C illustrant pointeurs et tableaux

Arithmétique : tableaux multidimensionnels C

Un tableau multidimensionnel est un tableau de tableaux. Par exemple, un tableau 2D est une collection de tableaux 1D. Il est important de comprendre que, dans ce cas, chaque « ligne » est un tableau et a également une adresse.

  • Prenons un tableau 2D :
				
					
int tableau2D[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};

				
			

L’accès à un élément spécifique se fait via deux indices, par exemple :

				
					
int val = tableau2D[1][2];
  // Accède à l'élément 7

				
			

Vous pouvez aussi utiliser des pointeurs pour accéder aux éléments d’un tableau 2D en les traitant comme un tableau 1D d’adresses :

				
					
int *p = &tableau2D[0][0];
int val = *(p + 5);
  // Accède à l'élément 6

				
			

Le pointeur p pointe sur le premier élément de tableau2D, et l’arithmétique des pointeurs permet de parcourir tout le tableau en mémoire.

				
					
#include <stdio.h>
int main() {
  // Déclaration d'un tableau 2D de 3 lignes et 4 colonnes
  int tab[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};
  // Pointeur vers un tableau de 4 entiers (les colonnes du tableau 2D)
  int(*ptr)[4] = tab;
  // Affichage du tableau en utilisant le pointeur
  printf("Affichage des éléments du tableau 2D via le pointeur :\n");
  for (int i = 0; i < 3; i++) {
    for (int j = 0; j < 4; j++) {
      // Accès aux éléments via le pointeur
      printf("%d ", ptr[i][j]);
    }
    printf("\n");
  }
  // Utilisation de l'arithmétique des pointeurs pour accéder aux éléments
  printf("\nUtilisation de l'arithmétique des pointeurs :\n");
  for (int i = 0; i < 3; i++) {
    for (int j = 0; j < 4; j++) {
      // *(ptr + i) pointe vers la ième ligne, et + j permet d'accéder à la jème
      // colonne
      printf("%d ", *(*(ptr + i) + j));
    }
    printf("\n");
  }
  return 0;
}

				
			
  • Example d’exaction du code sur Eclipse
Code C affichant arithmétique pointeurs tableau
Expression
Interprétation
Résultat
tableau[i]
Accès à l’élément i du tableau
Équivalent à *(tableau + i)
&tableau[i]
Adresse de l’élément i du tableau
*(tableau + i)
Valeur à l’adresse tableau + i
tableau
Pointeur constant vers tableau [0]
sizeof(tableau)
Taille totale du tableau
Différent de sizeof(p) où p est un pointeur

Conclusion sur pointeurs et tableaux C

À travers ce chapitre, nous avons exploré le lien entre les pointeurs et les tableaux en C, en montrant comment les pointeurs permettent d’accéder directement aux éléments d’un tableau. Il est essentiel de bien comprendre ces concepts pour gérer efficacement la mémoire dans les programmes C.

Formez-vous gratuitement avec Alphorm !

Maîtrisez les compétences clés en IT grâce à nos formations gratuites et accélérez votre carrière dès aujourd'hui.

Démarrer gratuitement
illustration processus de paiement en ligne avec étapes claires et convivialité

FAQ

Quelle est la relation entre un tableau et un pointeur en langage C ?
En langage C, un tableau et un pointeur sont étroitement liés. Le nom d’un tableau est traité comme un pointeur constant, représentant l’adresse du premier élément du tableau. Cela signifie que, dans de nombreux cas, un tableau peut être manipulé comme un pointeur. Cependant, le nom du tableau ne peut pas être modifié pour pointer ailleurs, contrairement à un pointeur ordinaire qui peut être redirigé vers différentes adresses.
Comment accéder aux éléments d'un tableau avec des pointeurs ?
Pour accéder aux éléments d’un tableau avec des pointeurs, l’arithmétique des pointeurs est utilisée. Par exemple, *(tableau + i) accède à l’élément d’indice i dans le tableau, ce qui est équivalent à tableau[i]. En utilisant un pointeur, on peut parcourir le tableau en modifiant simplement la valeur du pointeur pour accéder à différents éléments. Cela permet une manipulation flexible des tableaux en C.
Quelles sont les différences entre un tableau et un pointeur ?
Les différences principales entre un tableau et un pointeur en C incluent l’allocation mémoire, la modifiabilité et la taille. Un tableau est une zone contiguë de mémoire allouée à la compilation, tandis qu’un pointeur peut être redirigé vers différentes zones de mémoire. Le nom du tableau est constant et ne peut pas être modifié pour pointer ailleurs, contrairement à un pointeur qui est modifiable. De plus, sizeof appliqué à un tableau renvoie la taille totale du tableau, alors que pour un pointeur, il renvoie la taille de l’adresse qu’il contient.
Comment les pointeurs sont-ils utilisés avec des fonctions en C ?
En C, lorsque vous passez un tableau à une fonction, c’est un pointeur vers le premier élément qui est passé. Cela permet à la fonction de modifier les éléments du tableau en modifiant les valeurs via ce pointeur. Par exemple, une fonction peut recevoir un pointeur sur un tableau et modifier directement son contenu, ce qui est particulièrement utile pour passer de grands tableaux sans les copier.
Comment utiliser les pointeurs pour les tableaux multidimensionnels ?
Dans les tableaux multidimensionnels en C, chaque ‘ligne’ est un tableau ayant également une adresse. Pour accéder aux éléments, vous pouvez utiliser des pointeurs en les traitant comme un tableau 1D d’adresses. Par exemple, un pointeur peut être utilisé pour parcourir un tableau 2D en mémoire. L’arithmétique des pointeurs permet de naviguer à travers le tableau en ajustant le pointeur pour accéder aux différents éléments.

Conclusion

En comprenant la relation entre les pointeurs et les tableaux en C, on peut manipuler efficacement la mémoire dans les programmes. Quels autres aspects des pointeurs souhaitez-vous explorer pour renforcer vos compétences en C ?

ÉTIQUETÉ : Langage C
Facebook
Twitter
LinkedIn
Email
WhatsApp
Par L'Équipe Alphorm
Démocratiser la Connaissance Informatique pour Tous !
Suivre :
L'Équipe Alphorm, c'est la démocratisation de la connaissance informatique. Passionnés et dévoués, nous sommes là pour vous guider vers le succès en rendant la technologie accessible à tous. Rejoignez notre aventure d'apprentissage et de partage. Avec nous, le savoir IT devient une ressource inspirante et ouverte à tous dans un monde numérique en constante évolution.

Derniers Articles

  • Techniques pour gérer les fichiers texte en C#
  • Créer et lire un fichier CSV avec C#
  • JSON : Comprendre et Utiliser Efficacement
  • Créer une Base SQLite dans C#
  • Lecture des données SQLite simplifiée
Laisser un commentaire Laisser un commentaire

Laisser un commentaire Annuler la réponse

Vous devez vous connecter pour publier un commentaire.

Blog Alphorm
  • Développement
  • 3D et Animation
  • Cybersécurité
  • Infrastructure
  • Virtualisation
  • Réseaux
  • Bureautique
  • BDD
En cours de lecture : Pointeurs et Tableaux en C : Comprendre leur Relation

© Alphorm - Tous droits réservés