Programmation en C – Les pointeurs

Les pointeurs en C sont faciles et amusants à apprendre. Certaines tâches de programmation C sont exécutées plus facilement avec des pointeurs, et d’autres tâches, telles que l’allocation de mémoire dynamique, ne peuvent pas être effectuées sans utiliser de pointeurs. Il devient donc nécessaire d’apprendre des pointeurs pour devenir un programmeur C parfait. Commençons à les apprendre en quelques étapes simples et faciles.
 
 
Comme vous le savez, chaque variable est un emplacement de mémoire et chaque adresse de mémoire a son adresse définie qui peut être accédée en utilisant l’opérateur (&), qui dénote une adresse dans la mémoire. Considérons l’exemple suivant, qui affiche l’adresse des variables définies.
 

#include <stdio.h>

int main () {

   int  var;
   char tab[10];

   printf("Adresse de var : %xn", &var);
   printf("Adresse de tab : %xn", &tab);

   return 0;
}

Lorsque le code ci-dessus est compilé et exécuté, il produit le résultat suivant :

Adresse de var : afe7a8e6
Adresse de tab : afe7a349

 

C’est quoi un pointeur?

Un pointeur est une variable dont la valeur est l’adresse d’une autre variable, c’est-à-dire l’adresse directe de l’emplacement de la mémoire. Comme toute variable ou constante, vous devez déclarer un pointeur avant de l’utiliser pour stocker toute adresse de variable. La forme générale d’une déclaration d’un pointeur est :

type *p;

Ici, type est le type de base du pointeur; il doit s’agir d’un type de données C valide et p est le nom de pointeur. L’astérisque * utilisé pour déclarer un pointeur est le même astérisque utilisé pour la multiplication. Cependant, dans cette déclaration, l’astérisque est utilisé pour désigner une variable comme un pointeur. Jetez un coup d’oeil à certaines des déclarations de pointeur valides

int *p1;         /* pointeur vers un entier */
double *p2;      /* pointeur vers un double */
float *p3;       /* pointeur vers un flotteur */
char *p4;        /* pointeur vers un caractère */

Le type de données de tous les pointeurs, qu’ils soient entier, flottant, caractère ou autre, est le même. La seule différence entre ces pointeurs c’est le types de données de la variable vers laquelle pointe le pointeur.
 
 

Comment utiliser un pointeur?

Il y a quelques opérations importantes, que nous ferons très souvent avec des pointeurs.

  • Nous définissons une variable pointeur,
  • assignons l’adresse d’une variable à un pointeur,
  • accédons enfin à l’adresse disponible dans le pointeur.

Ceci est fait en utilisant l’opérateur unaire * qui renvoie la valeur de la variable située à l’adresse spécifiée par son opérande. L’exemple suivant utilise ces opérations :

#include <stdio.h>

int main () {

   int  var = 13;   /* Déclaration de la variable var */
   int  *p;        /* déclaration du pointeur p */

   ip = &var;  /* stocker l'adresse de var dans la variable de pointeur*/

   printf("Adresse de la variable var: %xn", &var  );

   /* adresse stockée dans la variable pointeur */
   printf("Adresse stockée dans la variable p: %xn", p );

   /* accède à la valeur en utilisant le pointeur */
   printf("Valeur de *p: %dn", *p );

   return 0;
}

Lorsque le code ci-dessus est compilé et exécuté, il produit le résultat suivant :

Adresse de la variable var: befa8b4c
Adresse stockée dans la variable p: befa8b4c
Valeur de *p: 13
Pointeur NULL

Il est toujours recommandé d’affecter une valeur NULL à un pointeur si vous n’avez pas d’adresse exacte à affecter. Ceci est fait au moment de la déclaration du pointeur . Un pointeur affecté à NULL s’appelle un pointeur NULL.

Le pointeur NULL est une constante dont la valeur est zéro est définie dans plusieurs bibliothèques standard. Considérez le programme suivant :

#include <stdio.h>

int main () {

   int  *p = NULL;

   printf("La valeur de p est : %xn", p  );
 
   return 0;
}

Lorsque le code ci-dessus est compilé et exécuté, il produit le résultat suivant :

La valeur de p est 0

Dans la plupart des systèmes d’exploitation, les programmes ne sont pas autorisés à accéder à la mémoire à l’adresse 0 car cette mémoire est réservée par le système d’exploitation. Cependant, l’adresse mémoire qui commence par 0 a une signification spéciale; il signale que le pointeur n’est pas destiné à pointer vers un emplacement de mémoire accessible. Mais par convention, si un pointeur contient la valeur null (zéro), il est supposé pointer vers rien.

Pour vérifier un pointeur nul, vous pouvez utiliser l’instruction ‘if’ comme suit :

if(p)     /* true si p n’est pas nul */
if(!p)    /* true si p est nul */
Les pointeurs en détail :
Les pointeurs ont beaucoup de concepts simples mais ils sont très importants dans la programmation en C. Les concepts suivants doivent être clairs pour tout programmeur C

Arithmétique du pointeur
Il y a quatre opérateurs arithmétiques qui peuvent être utilisés dans les pointeurs: ++, -, +, –

Tableau de pointeurs
Vous pouvez définir des tableaux pour contenir un certain nombre de pointeurs.

Pointeur vers un pointeur
C vous permet d’avoir un pointeur sur un pointeur et ainsi de suite.

Passage d’un pointeur vers une fonction en C
Passer un argument par référence ou par adresse permet à l’argument passé d’être changé dans la fonction appelante par la fonction appelée.

 

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.