Pointeurs dans la programmation C: Qu’est-ce que le pointeur, les types et les exemples

Qu’est-ce que le pointeur en C?

Le pointeur en C, est une variable qui stocke l’adresse d’une autre variable. Un pointeur peut également être utilisé pour faire référence à une autre fonction de pointeur. Un pointeur peut être incrémenté / décrémenté, c’est-à-dire pour pointer vers l’emplacement de mémoire suivant / précédent. Le but du pointeur est d’économiser de l’espace mémoire et d’accélérer le temps d’exécution.

Comment utiliser les pointeurs en C

Si nous déclarons une variable v de type int, v stockera en fait une valeur.

v est désormais égal à zéro.

Cependant, chaque variable, à part value, a aussi son adresse (ou, simplement, où elle se trouve dans la mémoire). L’adresse peut être récupérée en plaçant une esperluette (&) avant le nom de la variable.

Si vous imprimez l’adresse d’une variable à l’écran, elle aura l’air comme un nombre totalement aléatoire (de plus, il peut être différent d’une exécution à l’autre).

Essayons ceci en pratique avec un pointeur en C exemple

Le résultat de ce programme est -480613588.

Maintenant, qu’est-ce qu’un pointeur? Au lieu de stocker une valeur, un pointeur y stockera l’adresse d’une variable.

Variable de pointeur

Int * y = & v;

VARIABLE

POINTEUR

Une valeur stockée dans une adresse de stockage / mémoire nommée

Une variable qui pointe vers l’adresse de stockage / mémoire d’une autre variable

Déclaration d’un pointeur

Comme les variables, les pointeurs dans le programme C mming doivent être déclarés avant de pouvoir être utilisés dans votre programme. Les pointeurs peuvent être nommés comme vous le souhaitez tant qu’ils obéissent aux règles de dénomination de C. Une déclaration de pointeur a la forme suivante.

data_type * pointer_variable_name;

Ici,

  • data_type est le type de base du pointeur des types de variables de C et indique le type de la variable vers laquelle pointe le pointeur.
  • L’astérisque (*: le même astérisque utilisé pour la multiplication) qui est un opérateur d’indirection, déclare un pointeur.

Voyons quelques déclarations de pointeur valides dans ce tutoriel sur les pointeurs C:

Initialiser un pointeur

Après avoir déclaré un pointeur, nous l’initialisons comme des variables standard avec une adresse de variable. Si les pointeurs en programmation C ne sont pas non initialisés et utilisés dans le programme, les résultats sont imprévisibles et potentiellement désastreux.

Pour obtenir l’adresse d’une variable, nous utilisons l’opérateur perluète (&), placé avant le nom d’une variable dont nous avons besoin de l’adresse. L’initialisation du pointeur se fait avec la syntaxe suivante.

Syntaxe du pointeur

 pointer = &variable; 

Un programme simple pour l’illustration du pointeur est donné ci-dessous:

Sortie:

Address stored in a variable p is:60ff08Value stored in a variable p is:10
Opérateur Signification
* A 2 fins

  1. Déclaration d’un pointeur
  2. Renvoie la valeur de la variable référencée
& Sert uniquement à 1 objectif

  • Retours l’adresse d’une variable

Types de pointeurs en C

Voici les différents types de pointeurs en C:

Pointeur nul

Nous pouvons créer un pointeur nul en attribuant une valeur nulle lors de la déclaration du pointeur. Cette méthode est utile lorsque aucune adresse n’est attribuée au pointeur. Un pointeur nul contient toujours la valeur 0.

Le programme suivant illustre l’utilisation d’un pointeur nul:

#include <stdio.h>int main(){int *p = NULL; //null pointerprintf("The value inside variable p is:\n%x”,p);return 0;}

Résultat:

The value inside variable p is:0

Pointeur de vide

En programmation C, un pointeur de vide est également appelé comme pointeur générique. Il n’a aucun type de données standard. Un pointeur void est créé à l’aide du mot clé void. Il peut être utilisé pour stocker une adresse de n’importe quelle variable.

Le programme suivant illustre l’utilisation d’un pointeur void:

#include <stdio.h>int main(){void *p = NULL; //void pointerprintf("The size of pointer is:%d\n",sizeof(p));return 0;}

Sortie:

The size of pointer is:4

Pointeur sauvage

Un pointeur est dit être un pointeur sauvage s’il n’est initialisé à rien. Ces types de pointeurs C ne sont pas efficaces car ils peuvent pointer vers un emplacement mémoire inconnu qui peut causer des problèmes dans notre programme et cela peut entraîner un plantage du programme. Il faut toujours être prudent lorsque l’on travaille avec des pointeurs sauvages.

Le programme suivant illustre l’utilisation du pointeur sauvage:

#include <stdio.h>int main(){int *p; //wild pointerprintf("\n%d",*p);return 0;}

Sortie

timeout: the monitored command dumped coresh: line 1: 95298 Segmentation fault timeout 10s main

Les autres types de pointeurs dans « c » sont les suivants:

  • Pointeur suspendu
  • Pointeur complexe
  • Pointeur proche
  • Pointeur éloigné
  • Pointeur énorme

Pointeurs d’accès direct et indirect

En C, il existe deux méthodes équivalentes pour accéder et manipuler un contenu variable

  • Accès direct: on utilise directement le nom de la variable
  • Accès indirect: on utilise un pointeur vers la variable

Comprenons cela avec l’aide du programme ci-dessous

Après avoir compilé le programme sans aucune erreur, le résultat est:

Direct access, var = 1Indirect access, var = 1The address of var = 4202496The address of var = 4202496Indirect access, var = 48

Arithmétique du pointeur en C

Les opérations du pointeur sont résumées dans la figure suivante

Opérations de pointeur

Opération prioritaire (priorité)

Lorsque vous travaillez avec des pointeurs C, nous devons observer les règles de priorité suivantes:

Si un pointeur P pointe vers une variable X, alors * P peut être utilisé partout où X peut être écrit.

Les expressions suivantes sont équivalentes:

Dans ce dernier cas, les parenthèses sont nécessaires: comme les opérateurs unaires * et ++ sont évalués de droite à gauche, sans les parenthèses le pointeur P serait incrémenté, pas l’objet sur lequel pointe P.

Le tableau ci-dessous montre les opérations arithmétiques et de base qui peuvent être utilisées pour traiter les pointeurs C

Opération Explication
Affectation int * P1, * P2 P1 = P2; P1 et P2 pointent sur la même variable entière
Incrémentation et décrémentation Int * P1; P1 ++, P1–;
Ajout d’un offset (Constante) Cela permet au pointeur de déplacer N éléments dans un tableau. Le pointeur sera augmenté ou diminué de N fois le nombre d’octet (s) du type de la variable. P1 + 5;

Pointeurs C & Tableaux avec exemples

Traditionnellement, nous accéder aux éléments du tableau en utilisant son index, mais cette méthode peut être éliminée en utilisant des pointeurs. Les pointeurs facilitent l’accès à chaque élément du tableau.

Sortie

12345

L’ajout d’un nombre particulier à un pointeur déplacera l’emplacement du pointeur vers la valeur obtenue par une opération d’addition. Supposons que p est un pointeur qui pointe actuellement vers l’emplacement mémoire 0 si nous effectuons l’opération d’addition suivante, p + 1 alors il s’exécutera de cette manière:

Ajout / incrément du pointeur

Puisque p pointe actuellement vers l’emplacement 0 après avoir ajouté 1, la valeur deviendra 1, et par conséquent le pointeur pointera vers l’emplacement mémoire 1.

Pointeurs C et chaînes avec des exemples

Une chaîne est un tableau d’objets char, se terminant par un caractère nul « \ 0 ». Nous pouvons manipuler des chaînes à l’aide de pointeurs. Cet exemple de pointeur en C explique cette section

Sortie

First character is:HNext character is:ePrinting all the characters in a stringHelloGuru99!

Une autre façon de traiter les chaînes est d’utiliser un tableau de pointeurs comme ci-dessous programme:

Résultat:

Please remember these materials:ironcoppergold

Avantages des pointeurs en C

  • Les pointeurs sont utiles pour accéder emplacements de mémoire.
  • Les pointeurs fournissent un moyen efficace d’accéder aux éléments d’une structure de tableau.
  • Les pointeurs sont utilisés pour l’allocation dynamique de la mémoire ainsi que la désallocation.
  • Les pointeurs sont utilisés pour former des structures de données complexes telles que liste chaînée, graphique, arbre, etc.

Inconvénients des pointeurs en C

  • Les pointeurs sont un peu complexes à comprendre.
  • Les pointeurs peuvent entraîner diverses erreurs telles que des erreurs de segmentation ou peuvent accéder à un emplacement mémoire qui n’est pas du tout requis.
  • Si une valeur incorrecte est fournie à un pointeur, cela peut entraîner une corruption de la mémoire.
  • Les pointeurs sont également responsables des fuites de mémoire.
  • Les pointeurs sont comparativement plus lents que ceux des variables.
  • Les programmeurs trouvent qu’il est très difficile de travailler avec les pointeurs; il est donc de la responsabilité du programmeur de manipuler un pointeur avec soin.

Résumé

  • Un pointeur n’est rien d’autre qu’un emplacement mémoire où les données sont stockées.
  • Un pointeur est utilisé pour accéder à l’emplacement mémoire.
  • Il existe différents types de pointeurs tels qu’un pointeur nul, un pointeur sauvage, un pointeur vide et d’autres types de pointeurs.
  • Les pointeurs peuvent être utilisés avec un tableau et une chaîne pour accéder plus efficacement aux éléments.
  • Nous pouvons créer des pointeurs de fonction pour appeler une fonction de manière dynamique.
  • Les opérations arithmétiques peuvent être effectuées sur un pointeur appelé arithmétique de pointeur.
  • Les pointeurs peuvent également pointer vers une fonction, ce qui facilite l’appel de différentes fonctions dans le cas de la définition d’un tableau de pointeurs.
  • Lorsque vous souhaitez traiter différents types de données variables, vous pouvez utilisez un pointeur vide de type.

Write a Comment

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *